std :: cin.clear()无法将输入流恢复为良好状态

问题描述 投票:2回答:3

为了测试布尔输入/输出,我试图运行此简短程序:

#include <iostream>

int main()
{
 while(true)
 {
  bool f;
  if (std::cin >> f)
   std::cout << f << '\n';
  else
  {
   std::cout << "i/o error\n";
   std::cin.clear();
  }
 }
 return 0;
}

这是我得到的输出:

g++ -Wall -ansi -pedantic -o boolio boolio.cpp
./boolio
0
0
1
1
2
i/o error
-
i/o error
t
i/o error
i/o error
i/o error
... (infinite loop)

我想知道为什么输入“ t”时会出现无限循环,以及如何防止它发生。

谢谢。

c++ iostream
3个回答
3
投票

清除cin后添加此行:


2
投票

尝试使用以下组合:


1
投票

if (std::cin >> f)期望为0或1,并将所有其他值视为I / 0错误。即使您输入“-”或2,仍然需要std::cin.ignore()

© www.soinside.com 2019 - 2024. All rights reserved.