我正在使用 C++ Primer 一书学习 C++。
在 第 1.4.3 节 中,给出了以下关于读取未知数量输入的示例代码。
#include <iostream>
int main()
{
int sum = 0, value = 0;
// read until end-of-file, calculating a running total of all values read
while (std::cin >> value)
sum += value; // equivalent to sum = sum + value
std::cout << "Sum is: " << sum << std::endl;
return 0;
}
根据这本书,如果我们输入 3 4 5 6
,输出将是 Sum is: 18
但是当我在我的电脑上尝试这个( Windows 10 with MinGW )时,代码并没有结束。即使我输入换行符,它也会继续要求输入。它仅在我输入非整数输入时才有效,例如 f
。
这是预期的吗?如果是,是否有任何代码在输入换行符后停止?
我对 c++ 很陌生,而且我已经学过 python,所以这么早被卡住是非常令人沮丧的。
谢谢并恭祝安康。
原文由 Agile_Eagle 发布,翻译遵循 CC BY-SA 4.0 许可协议
您需要通过 End-Of-File-character 终止输入(即在 Windows 上为
CTRL-Z
,在 Mac/Unix 上为CTRL-D
),而不仅仅是通过 End-Of-Line(即Enter
)。一个简单的
Enter
被解释为空白,当读入一个整数数据类型时,它将被operator>>
简单地忽略。相反,
CTRL-Z
/ End-Of-File 会使任何operator>>
失败并出现错误。另请参阅 此 SO 答案。
注意:输入
f
也会终止你的循环,因为f
不是一个有效的整数;因此,std::cin >> value
与value
类型为int
和像f
这样的输入将失败。更准确地说:operator>>
实际上返回了对输入流的引用,但是如果读入一个值失败,则在流上设置failbit
,然后在a中解释流对象布尔表达式(隐式调用basic_istream::operator bool()
)返回false
;所以也许这本书的作者不想在书中的相应部分解释这些细节:-)