我尝试使用开关做一个简单的菜单。我还想检查用户是否输入了有效的输入(仅从1到4的整数)。输入-4或44可以很好地进行此检查。但是,如果我输入类似“w”的内容,则会给我一个无限循环。
我猜测我需要另一个if / else if(!cin)blabla else继续进行切换。
但是我不知道我该怎么做,否则其他人会开始转换。
int menu() {
int enter;
bool exit = false;
do {
cout << "Wie soll angefangen werden: " << endl; //Enter your choice
cout << "1 - Spiel starten" << endl; // do game();
cout << "2 - Highscore " << endl; //do score();
cout << "3 - Quiz starten " << endl; //do quiz();
cout << "4 - Ende " << endl; //end the programm
cin >> enter;
switch (enter) {
case 1:
game();
break;
case 2:
score();
break;
case 3:
showQuizDialog();
break;
case 4:
exit = true;
break;
default:
cout << "Keine gültige Eingabe, nochmal: " << endl; //invalid input, again
void flushCin();
} //end of switch
} while (exit == false);
}//end of menu();
最佳答案
这是因为输入试图获取整数。当输入不是整数时,输入将保留在缓冲区中,因此下次在循环中,相同的输入仍然存在。
同样,您在默认情况下没有调用flushCin
函数,而是在声明它。您可能要删除void
关键字。我猜这是对的吗? (即调用 std::cin.ignore()
和 std::cin::clear()
。)