当用户输入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";
}

根据书籍,我们初始化age变量,以便如果输入失败,则获得可预测的值。该示例说输入22 Carlos将产生Hello 22 (age -1)的输出。

我在文本编辑器(崇高的文本(中输入了相同的代码,但是当我使用上述输入运行代码时,我的年龄为0(不是-1(。这是我得到的输出的屏幕截图 - 终端输出图像。而且,这是我正在使用的编译器的版本 - 编译器 -

任何人都可以解释为什么我没有按年龄的输出获得-1,正如这本书所声称的吗?

简短的答案是,如果这本书的版本超过几年,则两者都是正确的。

在C 11之前,operator>>提取整数的默认行为是如果提取失败,则将其保持不变。

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

我不知道为什么要进行更改,但我的猜测是,它可以防止人们从保留变量非初始化的人中,然后在使用变量之前不检查该提取成功。

不幸的是,格式化输入背后的机械非常冗长,但是凝结的版本是调用最终归结为指定此行为的num_get::get() 1

1:为了您的兴趣,也可以将一个不同的方面连接用于格式的输入以使用,这意味着您可以指定失败的任何行为。

相关内容

  • 没有找到相关文章

最新更新