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

标签 c++ algorithm while-loop c++14 user-input

我正在使用 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 >> valuevalue类型 int和类似 f 的输入也会失败。更准确地说:operator>>实际上返回对输入流的引用,但如果读取值失败,failbit在流上设置,然后在 bool 表达式中解释流对象(隐式调用 basic_istream::operator bool() )返回 false ;所以也许这本书的作者不想在书中的相应部分解释这些细节:-)

关于c++ - 如何读取未知数量的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50608176/

相关文章:

Java 字符串置换ExecutorService

algorithm - 观看所有电影算法

python - 在 PYTHON 2.7 中循环发送电子邮件

Javascript:while循环永无休止

c++ - 为什么我的应用程序在关闭时有时会因 SIGSEGV 而崩溃?

C++ 动态数组 "losing"数据

javascript - 在网格中查找随机放置的元素 (x,y)

c++ - 压倒一切?向上转型?

c++ - 如何正确关机?

python - 值在 for 循环内自动更新