我正在尝试设置一个输入检查循环,以便它不断询问用户有效(整数)输入,但它似乎陷入了无限循环。
我搜索了解决方案并尝试ignore()
和clear()
,但仍然没有停止。
请你纠正我在哪里错了?
int num;
cin >> num;
while (cin.fail()) {
cin.ignore();
cin.clear();
cout << "Enter valid number: " << endl;
cin >> num;
}
答案 0 :(得分:3)
当流处于错误状态时,
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;
}
答案 1 :(得分:0)
当流处于失败状态时,ignore()
无效,因此首先clear()
。