Problem mit iostream
-
Hi!
Ich würde gern eine Zahl einlesen, komme aber schon mit der Fehlerbehandlung nicht klar:
int x; do { cin.clear(); cout << "Bitte Zahl eingeben: "; cin >> x; } while (!cin.fail());Das Problem ist nur: Wenn ich keine Zahl eingebe (z.B. a) dann komme ich in eine Endlosschleife und das Programm gibt die ganze Zeit die Aufforderung aus. Warum ist das denn so? Ich könnte mir vorstellen, dass die Eingabe nicht aus dem Stream entfernt wurde, weil das Lesen fehlgeschlagen ist, und somit die falsche Eingabe immer wieder gelesen wird. Nur wie mache ich das richtig?
Danke, Nybbs
-
Nybbs schrieb:
Ich könnte mir vorstellen, dass die Eingabe nicht aus dem Stream entfernt wurde, weil das Lesen fehlgeschlagen ist, und somit die falsche Eingabe immer wieder gelesen wird.
Soweit ich weiß ist es genau das, ja. Abhilfe sollte
cin.ignore(cin.rdbuf()->in_avail(), '\n');
schaffen. Ich hörte mal, dasscin.rdbuf()->in_avail()manchmal nicht "richtig" implementiert ist, Abhilfe schafft dann eine entsprechend große Zahl (z.B.std::numeric_limits<std::streamsize>::max()).
-
Hat funktioniert, danke. Aber darauf muss man erstmal kommen.
