std :: cin错误状态和变量更改

时间:2014-01-02 06:40:42

标签: c++ iostream cin

我认为,如果cin进入错误状态,它流入的变量将保持不变。但是,以下似乎是一个反例:

#include <iostream>
using namespace std;

int main()
{
  cout << "Enter int: ";

  int i = 5;
  cin >> i;

  if(cin.fail()) cout << "failed \n";
  cout << "You entered: " << i << "\n";
}

运行:

Enter int: g
failed 
You entered: 0

我去哪儿哦错了?

1 个答案:

答案 0 :(得分:1)

C ++ 11中的行为发生了变化。现在,失败的整数提取将变量设置为0。

即使没有-std=c++11标志,GCC 4.8也会展示新行为,这可能是库的错误/限制。只有一个libstdc ++,它不知道用于编译main的编译器标志。