Standarteingabe Fehler / Wichtig !!!



  • hallo ich habe folgendes:

    int a;
    	do{ 
    
    		cout << "1: Menue" << endl;
                      cout << "2: Menue" << endl;
                      cout << "3: Menue" << endl;
    		cout << "0: EXIT" << endl;
    
    		cout << "Eingabe : ";
    
    		cin >> a;
    		cout << endl;
    
    		if (a==1) a1();
    		if (a==2) a2();
    		if (a==3) a3();
    
    	}while (a!=0);
    

    Wenn ich nun aber einen Buchstaben anstelle der erwarteten Zahl eingebe,
    bekomme ich einen Fehler, indem sich das Textmenue im wieder in einer Endlosschscheife aufbaut. 😞

    Wie bekomme ich das weg ?
    Sprich wie Stelle ich es an das wirklich nur Zahlen eingegeben werden?



  • hat keinen ne Ahnung ???



  • int a = 0;
        do{
    
            cout << "1: Menue" << endl;
                      cout << "2: Menue" << endl;
                      cout << "3: Menue" << endl;
            cout << "0: EXIT" << endl;
    
            std::istringstream isstr;
    	std::string input;
    
    	do {
    		std::cout << "Eingabe: "; << std::flush;
    		std::getline(std::cin, input);
    
    		isstr.clear();
    		isstr.str(s);
    		isstr >> a;
    	} while (!isstr);
            cout << endl;
    
            if (a==1) a1();
            if (a==2) a2();
            if (a==3) a3();
    
        }while (a!=0);
    

    So in etwa?



  • Nein das hilft leider auch nicht !!!

    immer wenn ich einen Buchstaben eingebe anstelle einer zahl komme ich in eine Endlosschleife !!!



  • Artur_21 schrieb:

    Nein das hilft leider auch nicht !!!

    immer wenn ich einen Buchstaben eingebe anstelle einer zahl komme ich in eine Endlosschleife !!!

    Ja, dann versuch's mal hiermit

    int a;
        do{
            cout << "1: Menue" << endl;
            cout << "2: Menue" << endl;
            cout << "3: Menue" << endl;
            cout << "0: EXIT" << endl;
    
            cout << "Eingabe : ";
            a = -1;
            cin >> a;
            cin.clear(); // ggf. Eingabe-Fehler löschen
            cin.ignore( 9999, '\n' ); // Rest der Eingabezeile überlesen
            cout << endl;
    
            if (a==1) a1();
            if (a==2) a2();
            if (a==3) a3();
    
        }while (a!=0);
    

    Gruß
    Werner


Anmelden zum Antworten