Falsche Eingabe Abfangen
-
Ich versuchte bei einem Programm, in einer If-Abfrage fehlerhafte Eingaben abzufangen.
void starter() { int auswahl ; do { system("cls") ; cout << "Auswahl Menue, was wollen sie?\n 1 ==> Ein Fun Programm\n 2 ==> Ein nicht-Fun-Programm\n" ; cin >> auswahl ; if (auswahl == 1) funprogramm() ; else if (auswahl == 2) NotFun() ; else { cout << "Fehler, bei der Eingabe, bitte nur Zahlen eingeben\n" ; system("pause") ; } } while((auswahl != 1) && (auswahl != 2)) ; }
Mein Probleme ist, das er, bei eingabe von Sonderzeichen oder Buchstaben, das Programm immer wieder wiederholt, wobei er immer direckt die Fehlermeldung ausgibt, ohne das ich wieder etwas 'eingeben' kann.
Hab spÀter auch versucht fehlerhafte Eingaben wie folgt abzufangen:
else if ((auswahl != 1) && (auswahl != 2) { cout << "Fehler, bei der Eingabe, bitte nur Zahlen eingeben\n" ; system("pause") ; }
aber das haut auch nicht geklapt :/, sieht jemand woran der Fehler liegt
-
Um eine erneute Eingabe zu ermöglichen muss in cin das Fehlerflag zurĂŒckgesetzt werden.
void starter() { for(;;) // bis if( auswahl_ok ) break; (s.u.) { system("cls") ; cout << "Auswahl Menue, was wollen sie?\n 1 ==> Ein Fun Programm\n 2 ==> Ein nicht-Fun-Programm\n" ; bool auswahl_ok = false; int auswahl; if( cin >> auswahl ) { auswahl_ok = true; // es war eine Zahl if (auswahl == 1) funprogramm(); else if (auswahl == 2) NotFun(); else auswahl_ok = false; // es war aber keine 1 oder 2 } if( auswahl_ok ) break; cin.clear(); // hier ggf. Fehlerflag rĂŒcksetzen, sonst ist keine weitere Eingabe möglich cin.ignore( 999, '\n' ); // Rest der Zeile ignorieren cout << "Fehler, bei der Eingabe, bitte nur Zahlen eingeben\n" ; system("pause") ; } }
-
Huhu,
schau mal hier:#include <iostream> #include <limits> using namespace std; int main() { int zahl; cout << "Bitte Zahl eingeben: "; while(!(cin>>zahl)) { cin.clear(); cout << "Bitte Zahl eingeben: "; cin.ignore(numeric_limits<streamsize>::max(),'\n'); } cout << zahl; return 0; }
lg
-
Werner_logoff schrieb:
Um eine erneute Eingabe zu ermöglichen muss in cin das Fehlerflag zurĂŒckgesetzt werden.
void starter() { for(;;) // bis if( auswahl_ok ) break; (s.u.) { system("cls") ; cout << "Auswahl Menue, was wollen sie?\n 1 ==> Ein Fun Programm\n 2 ==> Ein nicht-Fun-Programm\n" ; bool auswahl_ok = false; int auswahl; if( cin >> auswahl ) { auswahl_ok = true; // es war eine Zahl if (auswahl == 1) funprogramm(); else if (auswahl == 2) NotFun(); else auswahl_ok = false; // es war aber keine 1 oder 2 } if( auswahl_ok ) break; cin.clear(); // hier ggf. Fehlerflag rĂŒcksetzen, sonst ist keine weitere Eingabe möglich cin.ignore( 999, '\n' ); // Rest der Zeile ignorieren cout << "Fehler, bei der Eingabe, bitte nur Zahlen eingeben\n" ; system("pause") ; } }
Danke, dir
Es funktioniert und ich habe es (nachdem ich mich mit den Begriffen eingearbeitet habe, bin noch AnfÀnger) vollstÀndig begriffen, danke!