-3
eingegeben wird

Ich habe einen Code über das Erraten einer geheimen Zahl geschrieben, aber ich habe ein Problem, wenn ein alphabetisches Zeichen als Eingabe anstelle einer Ganzzahl angegeben wird. Es hält das Programm an. Wie kann ich diesem Problem widerstehen?Wie Schleife neu zu starten, wenn ein Alphabet vom Benutzer in C++

srand(time(0)); 
int a,secret; 
secret=rand() % 10 +3; 
do{ 
     cout<<"Guess the secret num between 1-10 + 3 : "; 
cin>>a; 
else if(a>secret) 
{ 
    cout<<"Secret num is smaller!!"<<endl; 
} 
else if(a<secret) { 
    cout<<"Secret num is greater !!"<<endl; 
} 

} 
while(a!=secret) 
cout<<" "<<endl; 
cout<<""<<endl; 
    cout<<"Congratulations!!!! This is the secret num...."<<secret<<endl; 
+6

Code nicht kompiliert. Zeigen Sie uns den tatsächlichen Code. (wo ist zuerst wenn?) – Incomputable

+0

Sie müssen 'cin.clear()' verwenden, um den Fehlerstatus zurückzusetzen, wenn der Eingabestream nach einer ungültigen Eingabe übergeben wurde. –

+0

Überprüfen Sie das 'continue' Schlüsselwort –

Antwort

0

Sie haben nicht, aber wenn Sie immer noch das Problem lösen möchten, können Sie die Zeile streamen und die Linie in der Zahl nur bekommen.

Answered by Jesse Good here:

würde ich std::getline und std::string verwenden Sie die ganze Linie und dann nur brechen aus der Schleife zu lesen, wenn Sie die gesamte Linie zu einem Doppel umwandeln kann.

#include <string> 
#include <sstream> 

int main() 
{ 
    std::string line; 
    double d; 
    while (std::getline(std::cin, line)) 
    { 
     std::stringstream ss(line); 
     if (ss >> d) 
     { 
      if (ss.eof()) 
      { // Success 
       break; 
      } 
     } 
     std::cout << "Error!" << std::endl; 
    } 
    std::cout << "Finally: " << d << std::endl; 
} 
0

In Ihrem Fall, weil 0 außerhalb des zulässigen Bereichs ist, das ist wirklich einfach:

  1. initialisieren a-0 und wenn a 0 nach dem Extrahieren:
  2. clearcin
  3. ignorecin (Achten Sie darauf, dass Sie bis zum Zeilenende ignorieren möchten Charakter: Cannot cin.ignore till EOF?)

Ihr endgültiger Code soll wie folgt aussehen:

cout << "Guess the secret num between 1-10 + 3 : "; 
cin >> a; 

while (a != secret) { 
    if (a == 0) { 
     cin.clear(); 
     cin.ignore(std::numeric_limits<streamsize>::max(), '\n'); 
     cout << "Please enter a valid number between 1-10 + 3 : "; 
    } 
    else if (a < secret) { 
     cout << "Secret num is smaller!!\nGuess the secret num between 1-10 + 3 : "; 
    } 
    else if (a < secret) { 
     cout << "Secret num is greater !!\nGuess the secret num between 1-10 + 3 : "; 
    } 
    a = 0; 

    cin >> a; 
} 

Live Example