streams formatieren



  • Guten Morgen @all,

    ich habe in der Vergangenheit so eine Art C mit Klassen verwendet. In der letzten Zeit habe ich mich (unter VS2012) mit STL angefreundet und habe angefangen einen Teil meiner Projekte anzupassen. Dabei bin ich über die Formatierung von printf und Co gestolpert.

    Ich habe für die streams Formatfunktionen wie Width und Precision gefunden aber ganz so komfortabel wie ein klassischer Formatstring ist das nicht. Gibt es was vergleichbares für die iostreams?



  • Du könntest mal einen Blick auf boost::Format werfen. Dazu musst du allerdings die boost Bibliotheken installieren.



  • In der C++ Standard-Library selbst gibt es das nicht. Allerdings gibt es Libraries dafür, u.a. Boost.Format und FastFormat.



  • Danke, ich werde mir die Boost Lib mal ansehen.



  • Da das hier in den alten Thread mit reinpasst ...

    Noch mal eine Frage zur Ausgabe von Gleitkommazahlen. Ist es mit Boardmitteln der STL möglich, daß eine Gleitkommazahl mit n Nachkommastellen augegeben wird. Mir ist es mit precision bisher nur gelungen die Nachkommastellen zubegrenzen. Ich möchte aber das ggf. unnötige Stellen mit Nullen aufgefüllt werden.

    z.B. 3.14 soll als 3.1400 ausgegeben werden.



  • width und fill



  • Wenn immer genau X Nachkommastellen ausgegeben werden sollen,...

    float pi = 3.14f;
    std::cout << std::fixed << std::setprecision(X) << pi;
    


  • Danke,

    könnt Ihr mir noch erklären wo der Unterschied ist zwischen

    float pi = 3.14f;
    std::ofstream ofs("vcf.txt");
    ofs.precision(6);
    ofs.setstate(std::ios::fixed)
    ofs << pi << '\n';
    ofs.close()
    

    und

    float pi = 3.14f;
    std::ofstream ofs("vcf.txt");
    ofs << std::fixed << std::setprecision(6) << pi << '\n';
    ofs.close()
    

    Die erste Version gibt 3.14 aus und Sonne's Version wie gewünscht 3.140000.


  • Mod

    Vor allem mal ist das erste falsch. Was nicht unbedingt den Unterschied zwischen deinen Ausgaben erklärt, weil das eigentlich gar nicht compiliert.

    Du meinst sicherlich:

    ofs.setf(std::ios::fixed)
    

    Damit kann und wird das auch wie gewünscht funktionieren.

    Wieso muss ich eigentlich deine Frage für dich korrekt formulieren?



  • Hallo SeppJ,

    SeppJ schrieb:

    Vor allem mal ist das erste falsch. Was nicht unbedingt den Unterschied zwischen deinen Ausgaben erklärt, weil das eigentlich gar nicht compiliert.

    Mit VS2012 läßt sich das problemlos, compilieren.

    SeppJ schrieb:

    Du meinst sicherlich:

    ofs.setf(std::ios::fixed)
    

    Damit kann und wird das auch wie gewünscht funktionieren.

    Ja tut es, ich habs probiert. Ich hatte die falsche Funktion gewählt.

    SeppJ schrieb:

    Wieso muss ich eigentlich deine Frage für dich korrekt formulieren?

    Hast Du ja nicht, Du hast die Frage einfach nur beantwortet und mir meinen Fehler gezeigt.

    Mußt nicht immer so brummig sein 😉 .


Anmelden zum Antworten