我正在研究Bjarne Stroustrup的编程 - 使用C++的原理和实践,并得出以下示例:
#include "std_lib_facilities.h" int main() { /* Name and Age input */ cout << "Please enter your first name and age\n"; string first_name = "???"; int age = -1.0; cin >> first_name >> age; cout << "Hello," << first_name << "(age " << (age * 12) << " months)\n"; return 0; }
如果您运行程序并输入Carlos 22,它将正确输出Hello, Carlos (age 22)
.但是,如果你投入22卡洛斯,他说输出应该是Hello, 22 (age -1)
因为"卡洛斯不是一个整数......它不会被读".但是,当我运行它时,它返回Hello, 22 (age 0)
,似乎它正在为它分配一个垃圾值.我很好奇为什么会发生这种情况,因为本书暗示除非你输入一个整数,否则它不会尝试为age
变量赋值.我使用断点运行代码,并在age
输入非整数输入后确认从-1到0 的更改值.
难道我做错了什么?或者这是一个奇怪的事实,因为我正在通过Xcode和它包含的任何编译器构建它?
如果您跟踪通话中的通话轨迹
cin >> age;
您最终致电std::strtol
。的返回值为strtol
:
如果无法执行转换,则为“ 0”。返回。
cin
调用后检查的状态,以确保所有提取均成功。
cin >> first_name >> age; if ( cin ) { // Extraction was successful. // Use the data. } else { // Extraction was not successful. // Deal with the error. }