#include<strstream>
-
strstream ist deprecated. Nicht verwenden.
-
Skym0sh0 schrieb:
was ist denn strstream?
strstream findest du ganz hinten im Standard unter "deprecated"

-
super, dann mach ich ja alles richtig
-
Skym0sh0 schrieb:
und jetzt, kann es passieren dass alles glatt läuft, wird es in 999.99999% der Fälle aber nicht.
Es ist also zieeeeemlich sicher, dass es nicht glatt läuft. Wirklich, wirklich sicher. Mehr als sicher. :p
-
<strstream>Ist wiestd::strstreamveraltet. Nimm statt dessen<sstream>undstd::stringstream- Du musst eine Fehlerbehandlung einbauen:
std::string s("Hallo"); std::istringstream convert(s);//Richtige Klasse int sinint(0);//Hier initialisierst du die Variable erstmal ;) if(convert >> sinint) //Wenn erfolgreich, also die Konvertierung des Streams nach void* gibt keinen Null-Pointer zurueck und indiziert somit, dass nicht fail/bad-bit gesetzt wurde std::cout << sinint; //Ausgeben else std::cout << (sinint = -1); //Sonst sinint auf -1 setzen und das ausgeben std::cout << '\n'; //Du willst nicht flushen... :rolling_eyes: nimm eine Escapesequenz convert.clear(); std::string t("2"); convert.str(t); // Achtung! Hier lasse ich die Fehlerbehandlung weg, weil das nur ein Beispiel ist. Im echten Programm immer nutzen! int zwei(0);//Edit: Brav initialisieren convert >> zwei; std::cout << zwei; //Gibt bei mir 2 aus... :arrow_right: :rolling_eyes:Edit: VIEL ZU SPAET???

-
strstream ist die veraltete, prä-standard-version von stringstream, basiert auf char[] statt auf std::string. einfach sein lassen

-
Welcher Compiler wird da verwendet?
Da auch strstream auf den normalen stream-Klassen beasiert, sollten die arithmetischen Extraktoren genauso arbeiten, im Fehlerfall also eine 0 zurückliefern.
-
camper schrieb:
die arithmetischen Extraktoren
*alle
-
-
Michael E. schrieb:
Sone schrieb:
camper schrieb:
die arithmetischen Extraktoren
*alle
Weswegen sollten die anderen (Edit: Extraktoren) sich anders verhalten?Edit: Lol, der Mod der das editiert hat hat einige Posts doppelt gelassen. SeppJ?
-
Oh nein, schick mir jetzt bloß keinen Elektroschrott!

-
_matze schrieb:
Oh nein, schick mir jetzt bloß keinen Elektroschrott!

Zu spaet.
Adresse? Du kriegst noch ein intaktes 1GB DDR3-SDRAM Modul gratis!
-
Erstmal Danke an Alle! Ich benutze jetzt natürlich auch sstream ...
@Sone: Speziellen Dank an dich, ist natürlich perfekt dieser Code und funzt super.
Bis dann!
-
Sone schrieb:
Weswegen sollten die anderen (Edit: Extraktoren) sich anders verhalten?Weil der Standard das so festlegt. Die Zeichen- und Stringextraktoren verändern ihr ARrgument nicht im Fehlerfall. Die arithmetischen Extraktoren benutzen alle num_get, und das liefert eben 0 im Fehlerfall.
-
camper schrieb:
Sone schrieb:
Weswegen sollten die anderen (Edit: Extraktoren) sich anders verhalten?Weil der Standard das so festlegt. Die Zeichen- und Stringextraktoren verändern ihr ARrgument nicht im Fehlerfall. Die arithmetischen Extraktoren benutzen alle num_get, und das liefert eben 0 im Fehlerfall.
???
Ich dachte du beziehst dich auf den Konvertierungsoperator! Also dass der Ausdruckistream >> var"Null zurueck gibt" (eigentlich liefert er ja eine Referenz, aber fortgedacht...)Edit: Ja, du meinst wohl die Variable. Klar, dass das nur bei den arithmetischen Extraktoren so laeuft, bei bspw. Zeigern waere das wohl auch vielleicht unsinnig
-
Edit: das gilt so nur für C++11.
In C++03 wird im Fehlerfall in num_get nichts zugewiesen.
-
Okay, ich habe mich zu weit aus dem Fenster gewagt.
convert >> sinint; if(convert >> sinint) //Wenn erfolgreich, also die Konvertierung des Streams nach void* gibt keinen Null-Pointer zurueck und indiziert somit, dass nicht fail/bad-bit gesetzt wurde std::cout << sinint; //Ausgeben else std::cout << (sinint = -1); //Sonst sinint auf -1 setzen und das ausgebenHier bekomme ich immer False, also eine 0 zurück. Dementsprechend wird immer auf -1 gesetzt. Wie macht man das jetzt richtig?
-
Mathias1986 schrieb:
Okay, ich habe mich zu weit aus dem Fenster gewagt.
convert >> sinint; if(convert >> sinint) //Wenn erfolgreich, also die Konvertierung des Streams nach void* gibt keinen Null-Pointer zurueck und indiziert somit, dass nicht fail/bad-bit gesetzt wurde std::cout << sinint; //Ausgeben else std::cout << (sinint = -1); //Sonst sinint auf -1 setzen und das ausgebenHier bekomme ich immer False, also eine 0 zurück. Dementsprechend wird immer auf -1 gesetzt. Wie macht man das jetzt richtig?
Ich hab ausversehen das convert >> sinint in Zeile 1 oben nicht geloescht

Losch es und es duerfte funktionieren.Also der Code muss so aussehen (auch oben editiert):
std::istringstream convert(s); int sinint(0); if(convert >> sinint) //Wenn erfolgreich, also die Konvertierung des Streams nach void* gibt keinen Null-Pointer zurueck und indiziert somit, dass nicht fail/bad-bit gesetzt wurde std::cout << sinint; //Ausgeben else std::cout << (sinint = -1); //Sonst sinint auf -1 setzen und das ausgeben
-
Ganz begreifen tu ichs nicht aber jo, es funktioniert!
Mörci!
