Stream: mehrere Zahlen



  • Okay, das wäre eine Lösung. Aber dann sind die operatoren<</>> für cout und cin z.B. nicht mehr zu gebrauchen. Zudem ist dann alles voller reinterpret_casts. Das gibt mir irgendwie das Gefühl, dass die Lösung nicht besonders elegant ist, aber vielleicht gibt es auch keine andere.



  • Eisflamme schrieb:

    Okay, das wäre eine Lösung. Aber dann sind die operatoren<</>> für cout und cin z.B. nicht mehr zu gebrauchen.

    Warum nicht?

    Eisflamme schrieb:

    Zudem ist dann alles voller reinterpret_casts.

    Wenn's angebracht ist, ist am reinterpret_cast nichts schlimmes.

    Eisflamme schrieb:

    Das gibt mir irgendwie das Gefühl, dass die Lösung nicht besonders elegant ist, aber vielleicht gibt es auch keine andere.

    Sonst gingen im Textformat noch Delimiter, feste Breite oder variable Breite mit Angabe der Länge. Letztere beide mMn. bescheiden.

    Vielleicht hat jemand noch einen anderen Vorschlag?



  • es geht um das einlesen von zahlen und ihr macht da so ein affentheater draus 🙄



  • Swordfisch:
    Weil der mir die Zahlen binär ausgibt und ich bei der cin-Eingabe auch nicht spontan auf das Zeichen für 100 oder 200 komme. Ich will die aber eigentlich ganz gerne sehen. 😉 Ja, die von Dir erwähnten Alternativen gefallen mir auch weniger gut. Ein ' ' hinzuzufügen empfinde ich gerade jedoch noch etwas weniger unelegant.

    kasper:
    Na und? Wie würdest Du es denn lösen?



  • Eisflamme schrieb:

    kasper:
    Na und? Wie würdest Du es denn lösen?

    na und weiter nichts, ist einfach nur low level sinnig. 😃
    fscanf.



  • Ne, will C++ nutzen. Außerdem ist das auch nicht besser als die obige Lösung.



  • Eisflamme schrieb:

    Ne, will C++ nutzen. Außerdem ist das auch nicht besser als die obige Lösung.

    wenn du schlankeren code und einfachere lesbarkeit nicht als besser ansiehst dann kann ich dir auch nicht weiter helfen.
    weiterhin viel spaß beim verkomplizieren der angelegenheit.
    - und tschüs -



  • Eisflamme schrieb:

    Weil der mir die Zahlen binär ausgibt und ich bei der cin-Eingabe auch nicht spontan auf das Zeichen für 100 oder 200 komme. Ich will die aber eigentlich ganz gerne sehen. 😉

    Nur die Varianten für ifstream und ofstream schreiben byteweise.



  • Swordfish:
    Stimmt, da habe ich nicht genau genug geschaut, dann ist das okay. So vieleiInterpret_castsblähen den Code halt ziemlich auf. Wie löst ein Werner z.B. dieses Problem?



  • Eisflamme schrieb:

    Wie löst ein Werner z.B. dieses Problem?

    Hallo Eisflamme,

    ganz einfach mit einem Leerzeichen zwischen den Zahlen. Ich sehe da auch gar kein Problem; oder habe ich hier was überlesen?

    struct Test
    {
        int a;
        Subtest b;
    
        friend ostream& operator<<(ostream& os, const Test& test)
        {
            return os << test.a << " " << test.b; // Leerzeichen als Trenner
        } 
        // usw.
    

    Eisflamme schrieb:

    Die offensichtliche Lösung ist ein Leerzeichen zwischen die Zahlen zu stecken. Bisher habe ich in Serializer-Lösungen über Streams so etwas aber nicht gesehen.

    ich schon, warum auch nicht

    Gruß
    Werner



  • Okay, cool, so sieht meine aktuelle Lösung auch aus. 🙂 Ich muss dann nur aufpassen, wenn beim Serialisieren plötzlich Strings auftauchen, die Leerzeichen enthalten dürfen. Dann muss std::noskipws her, damit er bei \0 trennt, richtig? Und später für den Stream noch brav ios::skipws zurücksetzen, falls es vorher drin war.



  • Hallo nochmal,

    ich frage gleich nochmal hier nach. Jetzt würde ich gerne Strings in den Stream schicken, die aber mit Leerzeichen getrennt sein können sollen. Findet ihr meine folgende Lösung in Ordnung?

    ofstream: ofs << string << '\0';
    ifstream: getline(ifs, string, '\0');


Anmelden zum Antworten