#include<strstream>



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


  • Mod

    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



  • Sone schrieb:

    camper schrieb:

    die arithmetischen Extraktoren

    *alle

    Kaboooommm!



  • Michael E. schrieb:

    Sone schrieb:

    camper schrieb:

    die arithmetischen Extraktoren

    *alle

    Kaboooommm!

    😕 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!


  • Mod

    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 Ausdruck istream >> 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


  • Mod

    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 ausgeben
    

    Hier 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 ausgeben
    

    Hier 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! 😉


Anmelden zum Antworten