我正在尝试从我的教程书中检查C ++代码。我用CodeBlocks IDE编写了这个:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
/*...*/
using namespace std;
/*...*/
int main (void){
cout << "Please enter name and age: \n\n:>";
string _sInput = "";
int _intInput = -1;
cin >> _sInput >> _intInput;
cout << "Hello " << _sInput << "!\n";
cout << "You have aged " << _intInput << " years.";
}
根据Stroustrup先生在书中讨论的内容,现在我已经给出了变量_intInput
an初始值,如果我输入错误的数据,如James Boy
,我应该收到这样的输出:
Hello James!
You have aged -1 years.
但我得到的是You have aged 0 years.
就像我没有给出初始价值的时间。
我的代码有什么问题或什么?!
从C ++ 11开始,当从istream读取整数或浮点数失败时,目标变量设置为0.有关详细信息,请参阅this (cppreference.com)或this (stack overflow.com)。
这意味着,您不能使用sentinel值来检测解析错误,您必须使用例如fail()
method来检查是否存在某些错误。