std :: cin导致无限循环

时间:2017-03-26 00:03:56

标签: c++

为什么下面的代码在输入字符或字符串时会导致无限循环?我已经看到了有关它的问题,以及答案中提供的解决方案(例如here),但它似乎没有任何帮助。代码实现了那里建议的解决方案,但它仍然导致无限循环。

#include <iostream>
#include <bitset>
#include <limits>
using namespace std;

int main() {
  int n;
  while (!(cin >> n)) {
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cin.clear();
    cout << std::bitset<8>(cin.rdstate()) << endl;
    cin >> n;
    cout << std::bitset<8>(cin.rdstate()) << endl;
  }
  cout << n;
  return 0;
}

g++ --version大吼大叫:g++ (Ubuntu 6.2.0-5ubuntu12) 6.2.0 20161005

该计划的输出如下:

00000000
00000100
00000000
00000100
... and so on 

尽管流已被清除且所有输入都被忽略,但似乎该值正在重新进入。

1 个答案:

答案 0 :(得分:1)

您在ignore之前致电clear,但ignore仅在流没有错误时才有效,但此时始终有错误。
当您切换两个语句时,它可以正常工作:在一个或多个无效输入之后,您需要2个连续的有效输入才能成功终止程序。