Fehlerbehandlung von cin
-
Aloha,
ich will was mit cin von der Konsole einlesen. Wenn ich einen int erwarte, aber ein Buchstabe eingegeben wird, kann ich keine neue Eingabe mit cin anfordern ...
#include <iostream> using namespace std; int main (void) { int a = 0; while(1) { cout << "gib was ein:\n"; if(!(cin >> a)) cerr << "Fehler" << endl; if(a == 9) break; cout << "Eingabe war: " << a << endl; } }Wenn ich zB 'a' eingebe, dann wird ständig die Schleife durchlaufen (mit der Ausgabe: Fehler), ohne eine neue Eingabe zu ermöglichen ...
Auch ein cin.clear(); cin.ignore(); in Verbindung mit cerr ... helfen nicht.
Ich möchte aber gerne, daß die Aufforderung, etwas einzugeben, ausgegeben wird, und dann eine neue Eingabe möglich ist.
Was muß ich dafür tun?
-
Hi,
siehe hier: http://c-plusplus.net/forum/viewtopic-var-p-is-1319931.html
-
So:
#include <iostream> #include <limits> using namespace std; int main (void) { int a = 0; while(1) { cout << "gib was ein:\n"; if(!(cin >> a)) { cin.clear(); //Fehlerflags loeschen cin.ignore(numeric_limits<streamsize>::max(), '\n'); //alles Gelumpe im stream wegschmeissen cerr << "Fehler" << endl; } if(a == 9) break; cout << "Eingabe war: " << a << endl; } }
-
Vielen Dank!
Aber warum funktioniert: cin.clear(); cin.ignore(); nicht? Das sollte doch auch ein einzelnes Zeichen aus dem Puffer werfen können? So funktioniert es zB. mit cin.ignore(1, '\n');, was ja lediglich den Vorgabewert für den Delimiter von EOF auf '\n' ändert?!