【问题标题】:std::cin error state and variable changingstd::cin 错误状态和变量变化
【发布时间】:2014-01-19 14:09:15
【问题描述】:

我认为,如果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

我哪里错了?

【问题讨论】:

  • 这段代码对我来说工作得很好......输出为5! (MSVC)
  • i 的数据类型是 int;你在输出时给出了一个 char 值..
  • AFAIK 这属于未定义行为的范畴。

标签: c++ iostream cin


【解决方案1】:

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

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

【讨论】:

  • 您知道如何查看我使用的 C++ 版本吗?我正在使用 g++,为了使用其他 C++0x(与我听说过的 C++11 相同?)功能,我必须在编译时添加 -std=c++0x,所以我没有确定我在这里使用的是哪一个。编辑:使用 g++ 4.6.3
  • 无论如何,您都不应该依赖任何一种行为。将值视为不确定。
  • 是的,c++0x和c++11一样,所以你用的是C++11。
猜你喜欢
  • 1970-01-01
  • 2021-05-21
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多