我是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岁)”。为什么?
答案 0 :(得分:3)
将age
设置为0
的原因是because(假设您使用的是c ++ 11或更高版本):
,VC ++编译器才遵循此标准如果提取失败(例如,如果输入的字母是数字, 预期),值将保持不变,并设置故障位。 (直到C ++ 11)
如果提取失败,则将零写入值并设置故障位。 (自C ++ 11 起)