切换案例声明不正常吗?

时间:2011-08-23 08:58:45

标签: c++ switch-statement

所以我在一个简单的控制台应用程序中制作一个菜单。 我的代码非常多:(与底部的实际代码链接!)

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

1 个答案:

答案 0 :(得分:7)

您的代码无限循环,因为您从未将LOOPING设置为false。在实际代码中,您只在用户选择退出时将其设置为false,这将永远不会发生,因为用户在第一次输入非数字后无法再输入输入。

输入字符后它不会一直要求您输入的原因是>>不会消耗无效输入。即如果>>应该写入int,但是用户输入的内容不是有效的int,它不会写入int,但也不会从流中删除用户输入(相反,它只会设置cin的错误标志,你应该检查它。

输入将保留在流中,直到您将其写入其他位置或丢弃它。在您执行此操作之前,每次后续尝试读取int都将失败,因为无效输入仍在流中。