用户为int变量输入字符串时的输出 我现在正在读Stroustrup的C++书。在用户输入部分,它有以下示例- #include <iostream> #include <string> using namespace std; int main(){ cout << "Please enter your first name and age:\n"; string firstName = "???"; // "??? means don't know the name" int age = -1; // -1 means don't know the age cin >> firstName >> age; cout << "Hello " << firstName << " (age " << age << ")\n"; } #包括 #包括 使用名称空间std; int main(){ 简而言之,如果这本书的版本超过几年,那么两者都是正确的

用户为int变量输入字符串时的输出 我现在正在读Stroustrup的C++书。在用户输入部分,它有以下示例- #include <iostream> #include <string> using namespace std; int main(){ cout << "Please enter your first name and age:\n"; string firstName = "???"; // "??? means don't know the name" int age = -1; // -1 means don't know the age cin >> firstName >> age; cout << "Hello " << firstName << " (age " << age << ")\n"; } #包括 #包括 使用名称空间std; int main(){ 简而言之,如果这本书的版本超过几年,那么两者都是正确的,c++,input,user-input,C++,Input,User Input,在C++11之前,操作符>>提取整数的默认行为是,如果提取失败,则返回 在C++11中,当提取失败时,此行为被更改为将0存储到整数中 我不知道为什么会做出这样的更改,但我的猜测是,它可以防止一类常见的未定义行为,即人们在未初始化变量的情况下,在使用变量之前不检查提取是否成功 不幸的是,格式化输入背后的机制相当长,但压缩版本是调用最终归结到的,在这里指定了这种行为。1 1:出于您的兴趣,还可以使用格式化输入来代替,这意味着您可以指定失败的任何行为。更好的解决方案是不依赖为错误处理指定的特定值。op

在C++11之前,
操作符>>
提取整数的默认行为是,如果提取失败,则返回

在C++11中,当提取失败时,此行为被更改为将0存储到整数中

我不知道为什么会做出这样的更改,但我的猜测是,它可以防止一类常见的未定义行为,即人们在未初始化变量的情况下,在使用变量之前不检查提取是否成功

不幸的是,格式化输入背后的机制相当长,但压缩版本是调用最终归结到的,在这里指定了这种行为。1


1:出于您的兴趣,还可以使用格式化输入来代替,这意味着您可以指定失败的任何行为。

更好的解决方案是不依赖为错误处理指定的特定值。
operator>
如果提取失败,则将流置于错误状态。请检查该状态ead,例如:
if(cin>>firstName>>年龄){cout