Eingabeproblem bei Buchstaben

Lesterdor

Erfahrenes Mitglied
Guten Abend liebe Community,

ich habe einmal wieder ein Problem ;) .

Ich habe vorhin etwas für Testzwecke geschrieben, aber wie es die Überschrift schon sagt, habe ich einen Fehler.

Der Code:

Code:
#include <iostream>
 
using namespace std;
 
int main()
{
int code=0;
cout<<"Enter the code, please:";
cin>>code;
 for (int i=1;i<=1;)
{
 if(code==1888)
{
 cout<<"Code is correct\n";
 i++;
}
 else
{
 cout<<"Code is wrong\n";
 cout<<"Enter the code, please:\n";
 cin>>code;
}      
}
 
system("PAUSE");  
return 0;    
}

Der Benutzer wird also aufgefordert einen Code einzugeben, wenn dieser richtig ist, folgt die Ausgabe: "Code is correct", anderenfalls hat er die Möglichkeit ihn erneut einzugeben.

Das funktioniert auch alles soweit. Mein Problem ist aber, wenn der Benutzer zum Beispiel Buchstaben eintippt, erfolgt eine Endloschleife von "Code is wrong". Die Console gibt den oben genannten Text unendlich Mal aus, ich kann dann keine neue Eingabe tätigen.

Ich hoffe, ihr könnt mir helfen und danke recht herzlich im Voraus.
 
Hallo Lesterdor,

ich würde vorschlagen deine Eingabe auf Zahlen zu testen, sofern dein Code nur aus diesen besteht. Desweiteren bietet sich bei deiner Codelogik eine "do while Schleife" an. Deine For-Schleife sieht etwas merkwürdig aus, im Bezug auf mehrfach Versuche.
Teste deine Eingabe und lösche gegebenfalls den Stream.
Viel Spass beim lernen.

mfg:)
 
Hallo Lesterdor,

nach ungültigen Eingaben befindet sich der Eingabestream in einem Fehlerzustand. Das muss vor der nächsten Eingabe getestet und beseitigt werden.
Außerem würde ich den Code etwas ändern, um überflüssige Codewiederholungen zu vermeiden:
C++:
#include <limits>
#include <iostream>

using namespace std;
 
int main()
{
    while( true )
    {
        int code = 0;
        cout << "Enter the code, please:";
        cin >> code;

        if( cin ) // Eingabestream ok ?
        {
            if( code == 1888)
            {
                cout << "Code is correct\n";
                break;
            }
        }
        else
        {
            cin.clear();  // Fehlerzustand beseitigen 
            cin.ignore(numeric_limits<streamsize>::max(),'\n'); // Eingabepuffer leeren
        }

        cout<<"Code is wrong\n";
    }
    
    return 0;
}
Gruß
MCoder
 
Zurück