下面是C++中简单菜单的代码。出于某种原因,如果您给它垃圾输入,它会正确反应(“请再次尝试您的选择”)。然而,它会再次通过循环再次发出错误消息,然后最终恢复正常运行。在C++中重复循环
编辑
输入变量是char。如果垃圾输入只有一个字符长度,那么该循环就像它应该的那样工作。如果在用户被允许再次输入任何内容之前有任何额外的字符会导致循环被执行超过一次。
char input = 0;
while (input != 4)
{
cout << "1. Circle";
cout << "\n2. Rectangle";
cout << "\n3. Triangle";
cout << "\n4. Quit";
cout << "\nChoose a shape: ";
cin >> input;
switch(input)
{
case '1':
circleFunctions();
break;
case '2':
rectangleFunctions();
break;
case '3':
triangleFunctions();
break;
case '4':
exit(4);
default:
cout << "\nPlease try your selection again...\n";
input = NULL;
cin.ignore();
break;
}
cin.ignore();
cout << "\n";
}
看到这个常见问题:为什么我的程序进入一个无限循环当有人进入非法字符?(HTTP://www.parashift。 com/C++ - faq/stream-input-failure.html) - 你使用'ignore'错误而不是调用'clear'。 – ildjarn 2012-08-05 00:14:56
我会假设输入是一个int。你问什么? – 2012-08-05 00:15:20
正如Xero所回答的那样,std :: cin.clear()应该修复它,但是要注意你的输入类型,它看起来像你将它比作while语句中的一个数字,但在case语句中它是一个char 。 – SMK 2012-08-05 00:23:55