Wie funktioniert clear() im ostringstream???
-
Hallole.
Ich hätte da ein Problemchen mit clear().
Ich bastle in einer Schleife mit dem Ausgabeoperator einen ostringstream zusammen und haue den nachher in ein Array.
Dann mache ich ein clear() damit der ostringstream wieder leer ist und für den nächsten Durchlauf bereit ist.Ist er aber nicht!
Das Ganze wird trotz clear() immer weiter angehängt anstatt neu geschrieben.
Was habe ich an clear() nicht verstanden und wie bekomme ich den stream leer???Hier ein Beispiel:
ostringstream os_rechts; for(...) { os_rechts << "text" << Flag << "nochmehr text" << "wird ca10 mal durchlaufen!"; arr_rechts.push.back(os_rechts.str()); [b]os_rechts.clear();[/b]//Bereit machen für den nächsten Schleifendurchlauf }Bei den Clear wird der Stream aber definitiv nicht geleert obwohl es überall so beschrieben wird.
Stimmt aber offensichtlich nicht, da bein nächsten durchlauf der Text angehängt wird.Kann mir wer erklären was es damit auf sich hat und wie ich den Stream für ein neues Verwenden leeren kann?
Danke Mondmann
-
Hallo,
clear() löscht nur die Flags. Zum Leeren des Stringstreams nimmt man
os_rechts.str("");
-
clear() setzt NUR die eventuell vorhandenen Fehlerflags eines (beliebigen) Streams zurück. Den Puffer eines stringstream's kannst du mit der Methode str() zurücksetzen:
for(...) { os_rechts << "text" << Flag << "nochmehr text" << "wird ca10 mal durchlaufen!"; arr_rechts.push.back(os_rechts.str()); os_rechts.clear();//Fehlerflags resetten os_rechts.str("");//Puffer leeren }Edit: Zu langsam, aber egal - dafür noch eine Randfrage:
Woher hast du denn die Behauptung, daß clear() den Stream-Inhalt löschen würde?
-
Also das hab ich jetzt echt noch nirgendwo gelesen , in keinem tutorial.
Das hat mich jetzt nen halben Tag gekostet bis ich das mal lokalisieren konnte.Vielen Dank für die Hilfe, schon wieder was dazugelernt.
Grüße MOndmann
-
Mondmann schrieb:
Also das hab ich jetzt echt noch nirgendwo gelesen , in keinem tutorial.
Das hat mich jetzt nen halben Tag gekostet bis ich das mal lokalisieren konnte.Dann liest du eindeutig die falschen Tutorials (steht in deinem auch noch etwas von "<iostream.h>" oder "void main()"? Wenn ja, ist es definitiv veraltet).
Ich empfehle dir mal meinen Magazin-Artikel über IO-Streams. Dort habe ich mich auch mit Stringstreams beschäftigt.
-
Ja es scheint so.Werde ich mal nachlesen
Grüße MOndmann
-
Da hätte ich noch ne Frage zu getline()
Sieht ei mit so aus:
getline(st,grund_str,'|');Was gibt getline zurück im Fehlerfall? Wenn es das Zeichen zb. nicht findet?
Danke Mondmann
-
Ok hab jetzt einiges gelesen und weiß daß man Streamzustände auflesen kann.
Ich möchte dann im Fehlerfall eine Exception werfen.
Nur welche Exception wirft denn ein fehlerhafter Stream?
-
Mondmann schrieb:
Ich möchte dann im Fehlerfall eine Exception werfen.
Du kannst die Methode
exception()der Stream-Klasse verwenden, um das Verhalten umzustellen (als Parameter gibst du an, auf welche Fehler du reagieren willst).Nur welche Exception wirft denn ein fehlerhafter Stream?
std::ios_base::failure (ist von std::exception abgleitet, also kannst du mit e.what() erfahren, was kaputt ist).
-
Ok danke für die Auskunft.
Und wo ist das der Unterschied zu stream.good()?
Ich meine wo erfährt man denn solche Dinge, die online Tutorials sind zwar gut,aber irgendwie nicht vollständig...
Danke nochmal, Grüße Mondmann
-
Mondmann schrieb:
Und wo ist das der Unterschied zu stream.good()?
Im Vergleich zu was? stream.good() liefert true zurück, wenn keins der Fehlerflags gesetzt ist.
Ich meine wo erfährt man denn solche Dinge, die online Tutorials sind zwar gut,aber irgendwie nicht vollständig...
Ich hab' mein Wissen vorwiegend aus Büchern.
(PS: Und ich teile mein Wissen gerne - folge mal unauffällig dem Link in meiner Signatur)