为定义的变量传递错误的类型输入

时间:2014-07-14 01:57:52

标签: c++ input g++4.8

根据Stroustrup的“Programming:Principles and Practice Using C ++(第2版)”,以下程序应输出对象'age'的值-1。

#include <iostream>
using namespace std;

int main()
{
  int age = -1;
  cin >> age;

  cout << "\nAge:" << age;
}

INPUT: Carlos // string
OUTPUT: 0 // Why not -1 as Stroustrup states ?

C++ Standard: C++ 4.8.1

3 个答案:

答案 0 :(得分:2)

我只是引用cppreference

而不是找出C ++标准引用。
  

直到C ++ 11

     

如果提取失败(例如,如果输入了预期数字的字母),则值保持不变,并设置failbit。

     

从C ++ 11开始

     

如果提取失败,则将零写入值并设置failbit。如果提取结果的值太大或太小而不适合值,则写入std :: numeric_limits :: max()或std :: numeric_limits :: min()并设置failbit标志。

所以大概是,你的书假设是预先c ++ 11语义,但是你的编译器使用的是post c ++ 11语义。

答案 1 :(得分:0)

根据我的知识,年龄是整数,如果我们为它分配字符或字符串,它将不会接受,然后它将被赋予0,这是整数的默认值。

答案 2 :(得分:-2)

附录:当前选择的&#34;解决方案&#34;是危险的不正确,告诉读者依靠真正的UB行为,匿名的downvoters像gnats一样涌向这个答案。这是SO。通过匿名投票确定与月球的距离。


iostreams不保证在发生错误时用于输入的变量将保持不变。

RE

  

为什么不像Stroustrup那样-1?

他真的吗?

因为你没有提供引用,所以很难对此有所说明,但我更怀疑Stroustrup已经提出了这个要求。