c++ - 即使我调用ignore()和clear(),std::cin也会循环

标签 c++ cin

我正在尝试设置一个输入检查循环,以便它不断地要求用户提供有效的(整数)输入,但它似乎陷入了无限循环。

我已经寻找解决方案并尝试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/

相关文章:

c++ - 为什么我的程序无法识别 C++ 循环内的 Cin?

c++ - 在getline之后在c++中输入

c++ - 我如何在优先队列中找到值(value)?

c++ - 如何在不同的CMakeList.txt之间共享变量?

c++ - 在数组中搜索还是切换?对于通过替换的密码

c++ - 在 C++ 中处理大型数字数组的最佳方法是什么?

c++ - 如何自动更改变量的赋值?

c++ - 等待输入 C++

c++ - 如何使用两个独立的语法实现计算机语言翻译器

c++ - cin.getline 将字符串的开头设置为 '\0'