ungewolltes überspringen von cin()



  • Hallo,

    int x,y;
    cin>>x;
    cin>>y;
    

    mir ist aufgefallen, dass wenn man in der 2ten zeile einen Buchstaben eingibt die darauf folgende cin() funktion nciht mehr abgefragt wird. Warum ist das so? ich wollte zum beispiel die eingabe eines arrays mit xy.pushback(x) durch die eingabe eines 'e's terminieren.

    danke

    viele grüße



  • Wenn du "Müll" eingibst (d.h. Werte, die nicht interpretiert werden können), wird im Stream ein Fehlerflag gesetzt - und mit gesetztem Fehlerflag blockieren alle weiteren Eingabe-Anweisungen.
    Feststellen kannst du das mit cin.fail() , zurücksetzen mit cin.clear() (und anschließend mußt du noch die nicht interpretierbaren Eingaben aus dem Stream ziehen).



  • ok danke,
    aus dem stream ziehen heißt cout<<flush;?
    ich dachte das eingegebene buchstaben wenigstens als asciii zeichen erkennt werden und die entsprechende nr eingetragen wird.



  • Nein, cout hat damit nichts zu tun, das ist ein ganz anderer Stream. "aus dem Stream ziehen" heißt z.B. std::getline(cin,fehler); (da hast du anschließend in fehler die unpassenden Eingaben) oder cin.ignore(...); .



  • alles klar vielen dank


Anmelden zum Antworten