2011-08-23 75 views
0

所以我正在一个简单的控制台应用程序的菜单。 我的代码是相当多的:(链接到实际的代码在底部!)switch case statement not working right?

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

一个常量循环?有没有什么可以绕过这个循环,你错过了向我们展示? – PlasmaHH

+0

你没有添加它,所以它看起来很简单。它处于一个不变的循环中 – Rhexis

+0

发生的输出是什么?请发布所有相关代码,包括循环,您可能错过了其他人可以发现的问题。 – EkcenierK

回答

7

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

它不会不断地问你输入你输入的字符后的原因是,>>不消耗无效的输入。即如果>>应该写为int,但什么用户输入是不是有效的INT,也不会写为int,但它也不会从流中删除用户输入(相反,它会简单地设置cin的错误标志,你应该检查)。直到你把它写在其他地方或丢弃

输入将保持流。在此之前,每次后续尝试读取int都将失败,因为无效输入仍在流中。

+0

当你输入数字时,你可以退出。我想停止字符(如输入错误),以不使其从不在一个疯狂的循环 – Rhexis

+2

制止和清除'cin'缓冲区(你必须在'default'做:HTTP://计算器.com/questions/257091/how-do-i-flush-the-cin-buffer) – xanatos

+0

@xanatos谢谢!修复它,你是惊人的。 – Rhexis