#include <iostream>
#include <string>
using namespace std;
int main()
{
cout << "Please enter an integer between 1 and 5" << endl;
int x; //Selection of menu prompt
cin >> x;
while (x < 1 || x > 5) //Tossing out garbage input
{
cout << "Invalid selection, please make another." << endl;
cin >> x;
}
return 0;
}
当这个运行时,例如输入“a”,进入while循环,但不等待“cin&gt;&gt; x;”的用户输入。而是无限循环。有人可以向我解释为什么会发生这种情况以及我如何解决这个问题?我只能想象它与键盘缓冲区有关。
答案 0 :(得分:0)
在此代码中,cin
可能会进入错误状态。如果用户没有输入整数,则会失败。
也就是说,如果用户输入a
,则cin >> x
未设置x
,并且以后对cin >> x
的调用不会阻止。你看到一个无限循环。
您可以检查此故障状态并清除它。在继续使用类似的代码之前:
if (cin.fail())
{
cin.clear();
cin.ignore();
cerr << "Invalid selection, please make another." << endl;
}
答案 1 :(得分:0)
接受输入后,你真的应该使用cin.clear()和cin.ignore()。
cin.clear()清除cin上的错误标志,然后cin.ignore(5000,'\ n')跳到下一个换行符。它将跳过最多5000个字符,因此代码假设用户不会输入很长时间。