【发布时间】:2018-07-21 07:47:58
【问题描述】:
我是 C++ 新手,正在研究 Stroustrup 的编程原则和实践。在第 3.3 节中,他给出了以下示例:
#include <iostream>
#include <string>
int main() {
std::cout << "Please enter your first name and age\n";
std::string firstName;
int age;
std::cin >> firstName >> age;
std::cout << "Hello, " << firstName << " (age " << age << ")\n";
}
根据文本,我输入了“22 Carlos”并期望输出为 22,后跟一些随机数或 0。好吧,我得到 0。
然后我初始化变量并输入相同的“22 Carlos”:
string firstName = "???";
int age = -1;
我希望输出是“你好,22 岁(年龄 -1)”,如文本中所述,而是得到“你好,22 岁(0 岁)”。为什么?
【问题讨论】:
-
因为您的 STL 的
operator>>实现显式将无效的 int 输入设置为 0。这是允许的,尽管行为在 C++11 之前未定义,但在 C++11 和稍后。 -
只需检查如何从无效输入导致的流失败状态中恢复。
-
@πάνταῥεῖ 这不是链接中的重复问题。我在问为什么这本书和实际输出之间存在差异,链接的问题是询问是否有人使用提取运算符。完全不同。
-
将这个问题作为副本关闭的人没有阅读副本的答案,因为没有人回答这个问题。所以我重新提出这个问题。
-
在这里提问之前可以随时参考documentation,对不起。
标签: c++ std stdin cin stdstring