首页 > 解决方案 > 如何读取未知数量的输入?

问题描述

我正在使用 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,所以这么早被卡住是非常令人沮丧的。


谢谢并恭祝安康。

标签: c++algorithmwhile-loopc++14user-input

解决方案


您需要通过 End-Of-File-character 终止您的输入(即CTRL-Z在 Windows 上,CTRL-D在 Mac/Unix 上),而不仅仅是通过 End-Of-Line(即Enter)。

简单Enter被解释为空白,operator>>在读入整数数据类型时将被简单地忽略。

CTRL-Z/ End-Of-File 相反,使任何operator>>失败并出现错误。

另请参阅此 SO 答案

注意:输入f也会终止你的循环,因为f它不被认为是一个有效的整数;因此,std::cin >> value作为valuetypeint和输入 likef也会失败。更准确地说:operator>>实际上返回对输入流的引用,但如果读入一个值失败,failbit则在流上设置,然后在布尔表达式中解释流对象(隐式调用basic_istream::operator bool())返回false;所以也许这本书的作者不想在书中的相应部分解释这些细节:-)


推荐阅读