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

std::cin loops even if I call ignore() and clear()

本文关键字:ignore clear 调用 循环 cin std      更新时间:2023-10-16

我试图设置一个输入检查循环,这样它就可以不断地向用户请求有效的(整数)输入,但它似乎被困在了一个无限循环中。

我已经搜索了解决方案,并尝试了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>

以便能够使用CCD_ 6。

固定的代码块看起来像:

int num;
while ( !(cin >> num) ) {
   cin.clear();
   cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
   cout << "Enter valid number: " << endl;
}

当流处于失败状态时,ignore()不起作用,所以先执行clear()