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! 🙂


Anmelden zum Antworten