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()