为什么从输入收集字符串时整数输出为0

时间:2018-07-21 07:47:58

标签: c++ std stdin cin stdstring

我是C ++的新手,正在研究Stroustrup的编程原则和实践。在3.3节中,他给出了以下示例:

#include <iostream>
#include <string>

int main() {
  std::cout << "Please enter your first name and age\n";
  std::string firstName;
  int age;
  std::cin >> firstName >> age;
  std::cout << "Hello, " << firstName << " (age " << age << ")\n";
}

根据文本,我输入了'22 Carlos',并期望输出为22,后跟一些随机数或0。很好,我得到0。

然后我初始化变量并输入相同的'22 Carlos':

string firstName = "???";
int age = -1;

我希望输出为“ Hello,22岁(-1岁)”,如文本中所述,而是得到“ Hello,22岁(0岁)”。为什么?

1 个答案:

答案 0 :(得分:3)

age设置为0的原因是because(假设您使用的是c ++ 11或更高版本):

  

如果提取失败(例如,如果输入的字母是数字,   预期),值将保持不变,并设置故障位。 (直到C ++ 11)

     

如果提取失败,则将零写入值并设置故障位。   (自C ++ 11 起)

请注意,直到最近https://developercommunity.visualstudio.com/content/problem/285201/the-value-is-not-zeroed-after-failure-but-it-shoul.html

,VC ++编译器才遵循此标准