gpt4 book ai didi

c++ - 当用户为 int 变量输入字符串时输出

转载 作者:行者123 更新时间:2023-11-30 03:16:42 25 4
gpt4 key购买 nike

我目前正在阅读 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) 的输出。

我在文本编辑器 (Sublime Text) 中输入了相同的代码,但是当我使用上述输入运行代码时,我的年龄为 0(不是 -1)。这是我得到的输出的屏幕截图 - output image from terminal .而且,这是我正在使用的编译器版本 - compiler-version .

谁能解释为什么我没有像书中所说的那样得到 -1 作为年龄输出?

最佳答案

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

在 C++11 之前,operator>> 提取整数的默认行为是 leave it unchanged如果提取失败。

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

我不知道为什么要进行更改,但我的猜测是它可以防止一类常见的未定义行为,即人们让变量未初始化,然后在使用变量之前不检查提取是否成功。

不幸的是,格式化输入背后的机制相当冗长,但精简版本是调用最终归结为 num_get::get() ,其中指定了此行为。1

1:为了您的利益,也可以attach a different facet用于改为使用格式化输入,这意味着您可以指定任何您想要的失败行为。

关于c++ - 当用户为 int 变量输入字符串时输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56087461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com