std::cin 导致无限循环

阿德里安·雅沃谢夫斯基

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

#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 

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

打火机

您调用ignorebefore clear,但ignore只有在流没有错误时才有效,但在那个时候它总是有。
当您切换两个语句时,它工作正常:在一个或多个无效输入之后,您需要 2 个连续的有效输入才能成功终止程序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

来自无效输入的std :: cin无限循环

来自分类Dev

std :: cin无限循环输入错误

来自分类Dev

从文件加载时,cin.get导致无限循环

来自分类Dev

使用std :: cin输入停止while循环

来自分类Dev

(C ++)不会在std :: cin上停止并进入无限循环吗?

来自分类Dev

(C ++)不会在std :: cin上停止并进入无限循环吗?

来自分类Dev

在while循环中如何评估“ std :: cin >> value”?

来自分类Dev

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

来自分类Dev

std :: cin跳过空格

来自分类Dev

使用cin.fail()时的无限循环

来自分类Dev

std :: cin.fail()问题

来自分类Dev

为什么 std::lock() 在使用我自己的 unique_lock 对象时会导致无限循环?

来自分类Dev

std :: cin >> std :: string如何实现?

来自分类Dev

std :: cout << std :: cin有什么作用?

来自分类Dev

我可以循环直到 `std::cin` 在输入缓冲区中看到 `\n` 字符吗?

来自分类Dev

在读取非数值时的cin无限循环

来自分类Dev

cin和循环问题

来自分类Dev

C ++数组cin循环

来自分类Dev

使用时如何重设std :: cin?

来自分类Dev

使用std :: cin忽略/跳过令牌

来自分类Dev

Ignoring/skipping tokens using std::cin

来自分类Dev

试图了解std :: cin.get()

来自分类Dev

关闭文件混乱与std :: getline()和cin?

来自分类Dev

分叉进程时std :: cin不阻塞

来自分类Dev

C ++中std :: cin和isdigit的问题

来自分类Dev

使用std :: cin忽略/跳过令牌

来自分类Dev

错误:std :: cin的“ operator >>”不匹配

来自分类Dev

使用时如何重设std :: cin?

来自分类Dev

使用std :: ofstream C ++的无限while循环