如何读取未知数量的输入?

新手上路,请多包涵

我正在使用 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 许可协议

阅读 692
1 个回答

您需要通过 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 >> valuevalue 类型为 int 和像 f 这样的输入将失败。更准确地说: operator>> 实际上返回了对输入流的引用,但是如果读入一个值失败,则在流上设置 failbit ,然后在a中解释流对象布尔表达式(隐式调用 basic_istream::operator bool() )返回 false ;所以也许这本书的作者不想在书中的相应部分解释这些细节:-)

原文由 Stephan Lechner 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题