如何读取未知数量的输入
How to read unknown number of inputs?
我正在使用《C++入门》一书学习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
这样的非int输入时,它才起作用。
这是预期的吗?如果是,是否有任何代码在输入换行符后停止
我对c++还很陌生,而且我已经学会了python,所以这么早就陷入困境是很令人沮丧的。
谢谢和问候。
您需要通过文件结束字符(即Windows上的CTRL-Z,Mac/Unix上的CTRL-Dnter)。
简单的Enter被解释为空白,operator>>
在读取积分数据类型时会简单地忽略空白。
相反,CTRL-Z/文件结束会使任何operator>>
失败并出现错误。
另请参阅此SO答案。
注意:输入f
也将终止循环,因为f
不被视为有效的整数;因此,std::cin >> value
(其中value
为int
类型)和类似f
的输入也将失败。更准确地说:operator>>
实际上返回了对输入流的引用,但如果读入值失败,则在流上设置failbit
,然后在布尔表达式中解释流对象(隐式调用basic_istream::operator bool()
)返回false
;因此,也许这本书的作者不想在书中的各个部分解释这些细节:-)
这是预期的吗?
是的,因为默认情况下operator>>
会忽略前导空格,其中包括换行符。
如果是,是否有任何代码在输入换行符后停止?
使用std::cin.getline()
或std::getline()
而不是operator>>
。然后,您可以使用operator>>
和std::istringstream
来解析每一行的值,例如:
#include <iostream>
#include <string>
#include <sstream>
int main()
{
std::string line;
int sum, value;
do
{
std::cout << "Enter a set of numbers, or a blank line to exit: ";
if (!std::getline(std::cin, line) || line.empty())
break;
// read until end-of-line, calculating a running total of all values read
std::istringstream iss(line);
sum = 0;
while (iss >> value)
sum += value; // equivalent to sum = sum + value
std::cout << "Sum is: " << sum << std::endl;
}
while (true);
return 0;
}
实时演示
这是预期的吗?
是,这就是while (std::cin >> value)
的作用。请参阅此答案以获得更多解释:How is"std::cin>gt;值";在while循环中评估?
是否有任何代码在输入换行符后停止?
否,因为>>
只是忽略空白(也有@StephanLechner提到)
你可以做的是:
-
只要给出一个条件;如果它仅满足循环的CCD_ 24。你还可以提供控制台,使使用者例如:
std::cout << "Enter value to sum or press -1 to exit" << std::endl; while (std::cin >> value && value != -1) // if value == -1, loop stops. { sum += value; }
-
您可以简单地通过字符结尾终止:
- CTRL-Z在Windows上
- CTRL-D在Mac/Unix上
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 检查输入是否不是整数或数字
- 正在尝试了解输入验证循环
- 读取文件并输入到矢量中
- C++如何通过用户输入删除列表元素
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 用户定义函数中的指针和输入
- 如何在C++中检查2D数组中负值的输入验证
- 如何只允许用户输入正整数
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 输入中的字符串数未知(以字母表示)
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 如何在C 中输入未知数的整数输入