J'essaye d'avoir une boucle continue d'inviter l'utilisateur pour une option. Quand je reçois une chaîne de caractères au lieu d'un int, le programme boucle indéfiniment. J'ai essayé de mettre le résultat de la variable à NULL, en effaçant le flux d'entrée, et j'ai inclus dans try {} catch blocks (pas dans cet exemple). Quelqu'un peut-il m'expliquer pourquoi c'est?Est-ce que la boucle est interrompue après une saisie incorrecte?
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int menu(string question, vector<string> options)
{
int result;
cout << question << endl;
for(int i = 0; i < options.size(); i++)
{
cout << '[' << i << ']' << options[i] << endl;
}
bool ans = false;
do
{
cin >> result;
cin.ignore(1000, 10);
if (result < options.size())
{
ans = true;
}
else
{
cout << "You must enter a valid option." << endl;
result = NULL;
ans = false;
}
}
while(!ans);
return result;
}
int main()
{
string menuQuestion = "Welcome to my game. What would you like to do?";
vector<string> mainMenu;
mainMenu.push_back("Play Game");
mainMenu.push_back("Load Game");
mainMenu.push_back("About");
mainMenu.push_back("Exit");
int result = menu(menuQuestion, mainMenu);
cout << "You entered: " << result << endl;
return 0;
}
double possible de [While avec prise d'essai échoue à mauvaise entrée cin] (http://stackoverflow.com/questions/2292202/while-loop-with-try-catch-fails-at-bad-cin-input) – kennytm
Préférez les caractères entre guillemets plutôt que leurs équivalents décimaux. Ainsi 'cin.ignore (1000,10)' devient le 'cin.ignore (1000, '\ n')' plus lisible. –