当收到无效输入时,为什么(true)跳过CIT

Why does while (true) skip cin when it received invalid input?

本文关键字:true 跳过 CIT 为什么 无效 输入      更新时间:2023-10-16

此while-loop在接收错误输入(非整数(后不等待CIN的输入。CIN是否以某种方式保持虚假状态?

while (true) {
    int x {0};
    cout << "> ";
    cin >> x;
    cout << "= " << x << endl;
}

我希望这是循环每次等待输入的,但是当它收到错误输入时,这不再发生。

cin失败后,它一直处于无效状态,直到清除为止。

clear((无参数可以使用意外输入后解开失败限制

通过分配它们的值来设置流错误状态标志 状态。默认情况下,分配std :: ios_base :: goodbit具有效果 清除所有错误状态标志。

@peter指出,您还必须清除缓冲区。

您的示例就是这样:

while (true) {
  int x{0};
  cout << "> ";
  if (!cin) {
    // unset failbit
    cin.clear();
    // clear the buffer
    cin.ignore(numeric_limits<streamsize>::max(), 'n');
  }
  cin >> x;
  cout << "= " << x << endl;
}