Wie scanne ich Floats mit sscanf



  • Hi,

    ich verzweifle hier gerade nach stundenlangem Studieren von Google und diversen Beispielen.

    Ich will mit sscanf drei floats einlesen. Hier ist der Code:

    char test[] = "0.0000 1.0000 1.0000";
    float x1;
    float x2;
    float x3;
    sscanf(test, "%f %f %f", &x1, &x2, &x3);
    cout << "\n Read values: " << x1 << "|"<< x2 << "|" << x3;
    

    Heraus kommt:

    Read values: 0|0|-1.46806
    

    Was mache ich nur falsch?? Bin für jede Hilfe extrem dankbar...

    Viele Gürße
    sprungfeld



  • sscanf statt scanf statt cin nutzen und auch noch mit cout mixen



  • Ich kann keinen Fehler im Code erkennen. Dein Code funktioniert bei mir und auf ideone: http://ideone.com/WYTHo
    Nichtsdestotrotz gibt es in C++ dafür std::stringstream, mit dem man normalerweise solche Aufgaben macht.

    Skym0sh0: sscanf liest aus einem String und hat nichts mit Standardein- und ausgabe zu tun.



  • Das ginge so:

    std::string str("5.5 8.7 6.9");
    
    std::stringstream stream(str);
    
    float a,b,c;
    
    stream >> a >> b >> c;
    
    std::cout << a << '\n'
              << b << '\n'
              << c << '\n';
    

    http://ideone.com/lVHgs

    :xmas1: :xmas2:


  • Mod

    Ich schlage noch

    std::stringstream stream("5.5 8.7 6.9");
    

    vor. Ich mag es, wenn meine temporären Objekte auch wirklich temporär sind.



  • SeppJ schrieb:

    Ich schlage noch

    std::stringstream stream("5.5 8.7 6.9");
    

    vor. Ich mag es, wenn meine temporären Objekte auch wirklich temporär sind.

    nenenenene! der Busch!
    Ich meine, vielleicht wird das eine Funktion oder so. Da wird er doch keine Konstanten nehmen (außer es ist eine Prozedur).



  • Hacker schrieb:

    nenenenene! der Busch!
    Ich meine, vielleicht wird das eine Funktion oder so. Da wird er doch keine Konstanten nehmen (außer es ist eine Prozedur).

    Wir sind hier nicht in Delphi. 😉


Anmelden zum Antworten