c++ - 如何读取未知数量的输入?
问题描述
我正在使用 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,所以这么早被卡住是非常令人沮丧的。
谢谢并恭祝安康。
解决方案
您需要通过 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
作为value
typeint
和输入 likef
也会失败。更准确地说:operator>>
实际上返回对输入流的引用,但如果读入一个值失败,failbit
则在流上设置,然后在布尔表达式中解释流对象(隐式调用basic_istream::operator bool()
)返回false
;所以也许这本书的作者不想在书中的相应部分解释这些细节:-)
推荐阅读
- delphi - 错误消息 = 找不到 -lbz2 的库
- javascript - 使用jquery根据日期选择选项
- jquery - jquery 查询字符串为空
- winapi - 如何使用 win32 API 更改 ComboBox 的颜色
- r - 创建 Padovan 序列的函数
- html - 只需使用标签并希望在移动平台中对其进行自定义
- spring-boot - 在springboot2.0中使用ehcache时'sync = true'是否有效
- sql - PostgreSQL 中的 percentile_cont 的奇怪结果是多年来每个 mmdd 的 count(*)
- c# - 将 [数据类型] nvarchar 转换为整数时出错
- c++ - Ratio<,> 是常数,但如果我想接受不同的比率作为参数怎么办?