我正在使用 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
但是当我在我的计算机(带有 MinGW 的 Windows 10)上尝试这个时,代码并没有结束。即使我输入换行符,它也会继续要求输入。它仅在我输入非整数输入(如 f
)时有效。
这是预期的吗?如果是,有没有输入换行后停止的代码?
我是 c++ 的新手,而且我已经学过 python,所以这么早就陷入困境是非常令人沮丧的。
感谢和问候。
最佳答案
您需要通过文件结束字符终止输入(即 Windows 上的 CTRL-Z,Mac/Unix 上的 CTRL-D),而不是仅通过行尾(即 Enter)。
一个简单的 Enter 被解释为空白,operator>>
将忽略它读入整数数据类型时。
CTRL-Z/End-Of-File,相比之下,使任何operator>>
因错误而失败。
另见 this SO answer .
注意:输入 f
也会终止你的循环,因为 f
不被视为有效整数;因此,std::cin >> value
与 value
类型 int
和类似 f
的输入也会失败。更准确地说:operator>>
实际上返回对输入流的引用,但如果读取值失败,failbit
在流上设置,然后在 bool 表达式中解释流对象(隐式调用 basic_istream::operator bool()
)返回 false
;所以也许这本书的作者不想在书中的相应部分解释这些细节:-)
关于c++ - 如何读取未知数量的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50608176/