所以我在一个简单的控制台应用程序中制作一个菜单。 我的代码非常多:(与底部的实际代码链接!)
int input;
bool LOOPING = true;
while(LOOPING)
{
cout << "Select an option:\n";
cout << "1 - option 1\n";
cout << "2 - option 2\n";
cout << "3 - option 3\n";
cout << "4 - option 4\n>";
cin >> input;
switch(input) {
case 1:
game();
break;
case 2:
game();
break;
case 3:
game();
break;
case 4:
game();
break;
default:
cout << "ERROR: invalid input!\nPlease enter in a number!\n\n";
break;
}
}
// rest of app...
我的问题是,程序只是进入一个恒定的文本循环!为什么会这样?为什么default:
不能阻止这种情况发生?如何阻止这种情况发生?
提前致谢!
编辑:要求提供真实的代码。
http://pastie.org/2415852
http://pastie.org/2415854
http://pastie.org/2415855
答案 0 :(得分:7)
您的代码无限循环,因为您从未将LOOPING
设置为false。在实际代码中,您只在用户选择退出时将其设置为false,这将永远不会发生,因为用户在第一次输入非数字后无法再输入输入。
输入字符后它不会一直要求您输入的原因是>>
不会消耗无效输入。即如果>>
应该写入int
,但是用户输入的内容不是有效的int,它不会写入int,但也不会从流中删除用户输入(相反,它只会设置cin
的错误标志,你应该检查它。
输入将保留在流中,直到您将其写入其他位置或丢弃它。在您执行此操作之前,每次后续尝试读取int
都将失败,因为无效输入仍在流中。