std::cin 循环,即使我调用了 ignore() 和 clear()
std::cin loops even if I call ignore() and clear()
我正在尝试设置一个输入检查循环,以便它不断要求用户输入有效(整数),但它似乎陷入了无限循环。
我已经搜索了解决方案并尝试了 ignore()
和 clear()
,但它仍然没有停止。
你能指正我哪里错了吗?
int num;
cin >> num;
while (cin.fail()) {
cin.ignore();
cin.clear();
cout << "Enter valid number: " << endl;
cin >> num;
}
当流处于错误状态时,
cin.ignore();
什么都不做。在调用 cin.ignore()
.
之前,您需要先调用 cin.clear()
此外,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;
}
当流处于失败状态时,ignore()
无效,因此请先执行 clear()
。
我正在尝试设置一个输入检查循环,以便它不断要求用户输入有效(整数),但它似乎陷入了无限循环。
我已经搜索了解决方案并尝试了 ignore()
和 clear()
,但它仍然没有停止。
你能指正我哪里错了吗?
int num;
cin >> num;
while (cin.fail()) {
cin.ignore();
cin.clear();
cout << "Enter valid number: " << endl;
cin >> num;
}
当流处于错误状态时,
cin.ignore();
什么都不做。在调用 cin.ignore()
.
cin.clear()
此外,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;
}
当流处于失败状态时,ignore()
无效,因此请先执行 clear()
。