我正在尝试设置一个输入检查循环,以便它不断地要求用户提供有效的(整数)输入,但它似乎陷入了无限循环。
我已经寻找解决方案并尝试ignore()
和clear()
,但它仍然没有停止。
您能纠正我的错误吗?
int num;
cin >> num;
while (cin.fail()) {
cin.ignore();
cin.clear();
cout << "Enter valid number: " << endl;
cin >> num;
}
最佳答案
当流处于错误状态时,
cin.ignore();
不执行任何操作。您需要先调用cin.clear()
,然后再调用cin.ignore()
。
此外,cin.ignore()
将仅忽略一个字符。要忽略一行输入,请使用:
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
添加
#include <limits>
能够使用std::numeric_limits
。
修复后的代码块将类似于:
int num;
while ( !(cin >> num) ) {
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cout << "Enter valid number: " << endl;
}
关于c++ - 即使我调用ignore()和clear(),std::cin也会循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38680441/