cin >> menuChoice;
while (!(cin >> menuChoice))
{
cout << "invalid selection, please enter a number from the menu 1" << endl;
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
我想'捕获'一个字符串,以便程序不会崩溃或进入连续循环,所以我进入上面的while循环。看起来不错。这是直到我输入0进入菜单选项 - !(cin&gt;&gt; menuChoice)被调用,即使它是有效的输入(我将使用另一个循环来确保它在范围内,但只要它是一个int它应该没关系,这就是我的想法。
我甚至试过了
if (menuChoice == 0)
menuchoice = 6;
就在while循环之前,但无济于事。
有任何帮助吗?
答案 0 :(得分:1)
我希望将菜单和验证部分分开(目前它的功能,但我将来会将它们更改为类)。
验证部分:
while (!(cin >> menuChoice))
{
cout << "invalid selection, please enter a number from the menu 1" << endl;
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
while (menuChoice < 1 || menuChoice > 4)
{
cout << "invalid selection, please enter a number from the menu 2" << endl;
cin >> menuChoice; //here is where there is a problem
while (!(cin >> menuChoice))
{
cout << "invalid selection, please enter a number from the menu 3" << endl;
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
while循环1 - 捕获任何初始字符串输入 while loop 2 - 确保正确的范围 while loop 3 - 捕获任何字符串输入,用户可以再次输入
答案 1 :(得分:0)
结果只是
cin>> menuChoice;
while (!cin)
{
cout << "invalid selection, please enter a number from the menu 1" << endl;
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cin>> menuChoice;
}
需要(以及代码的其余部分等)