std::cin wird in while() übersprungen?



  • Hey,
    ich habe ein kleines Problem. Ich nehme in meinem Programm eine Eingabe mit std::cin entgegen. Damit der Prozess wiederholt wird wenn der Benutzer eine falsche Eingabe tätigt habe ich das Ganze in eine while()-Schleife gesteckt.

    void selectWord(){
    	int input;
    	bool doInput = true;
    	cout << "Bitte wählen sie eine Zahl von 0-5: ";
    	while(doInput){
    		if(!(cin >> input)){
    			cout << "Ungültige Eingabe, versuchen sie es erneut: ";
    		} else {
    			doInput = false;
    		}
    	}
    }
    

    Nund wird der Benutzer zur Eingabe gefordert. Gibt er etwas falsches ein wird aber einfach das std::cin im if() übersprungen und es wird unendlich und ohne aufforderung zur Eingabe "Ungültige Eingabe, versuchen sie es erneut:" ausgegeben.

    Woran liegt das?
    MfG, Series



  • Series schrieb:

    Woran liegt das?

    Falls keine int Zahl aus dem Stream ausgelesen werden kann geht das cin Objekt in einen Fehlerzustand. Außerdem bleibt die falsche Eingabe im Stream erhalten. Du müsstest also vor einer Eingabe den Stream leeren und den Fehlerzustand aufheben.



  • hmpf schrieb:

    Series schrieb:

    Woran liegt das?

    Falls keine int Zahl aus dem Stream ausgelesen werden kann geht das cin Objekt in einen Fehlerzustand. Außerdem bleibt die falsche Eingabe im Stream erhalten. Du müsstest also vor einer Eingabe den Stream leeren und den Fehlerzustand aufheben.

    So z.B.

    #include <limits> 
    void selectWord(){
    	int input;
    	bool doInput = true;
    	cout << "Bitte wählen sie eine Zahl von 0-5: ";
    	while(doInput){
    		if(!(cin >> input)){
    		     cout << "Ungültige Eingabe, versuchen sie es erneut: ";
                 cin.clear();
                 cin.ignore(numeric_limits<streamsize>::max(),'\n');
    		} else {
    			doInput = false;
    		}
    	}
    }
    

Log in to reply