std :: cin循环,即使我调用ignore()和clear()

时间:2016-07-31 03:19:45

标签: c++ cin

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

我搜索了解决方案并尝试ignore()clear(),但仍然没有停止。

请你纠正我在哪里错了?

int num;
cin >> num;
while (cin.fail()) {
  cin.ignore();
  cin.clear();
  cout << "Enter valid number: " << endl;
  cin >> num;
}

2 个答案:

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