C++编程中,处理用户输入是一项基本且重要的任务。特别是在需要处理数量不定的输入数据时,我们需要一种灵活的方法来读取并处理这些数据,直到没有新的输入为止。
1. 读取数量不定的输入数据
在前一节中,我们编写了一个程序来计算1到10这10个整数的和。现在,我们希望扩展这个程序,使其能够对用户输入的一组数求和。由于我们无法预先知道用户会输入多少个数字,因此需要一种方法来不断读取数据,直到没有新的输入为止。
以下是一个示例程序
#include <iostream>
int main()
{int sum = 0, value = 0;// 读取数据直到遇到文件尾,计算所有读入的值的和while (std::cin >> value)sum += value; // 等价于 sum = sum + valuestd::cout << "Sum is: " << sum << std::endl;return 0;
}
2. 代码解析
- 变量初始化:
int sum = 0, value = 0;:定义并初始化两个整数变量sum和value,分别用于存储累加和和当前输入的值。
- 循环读取输入:
while (std::cin >> value):while循环的条件部分是std::cin >> value,这个表达式从标准输入读取下一个整数并存储在value中。输入运算符返回其左侧运算对象,即std::cin,因此循环条件实际上检测的是std::cin的状态。
- 检测流状态:
当使用istream对象(如std::cin)作为条件时,其效果是检测流的状态。如果流是有效的(即未遇到错误),则条件为真。当遇到文件结束符(EOF)或无效输入(如输入的不是整数)时,istream对象的状态会变为无效,条件变为假,循环结束。
- 累加求和:
sum += value;:将当前输入的value加到sum上,实现累加功能。
- 输出结果:
std::cout << "Sum is: " << sum << std::endl;:输出累加结果。
3. 示例运行
假设输入以下数据:
3 4 5 6
程序将输出:
Sum is: 18
从键盘输入文件结束符
当从键盘向程序输入数据时,对于如何指出文件结束,不同操作系统有不同的约定。
在 Windows 系统中,输入文件结束符的方法是嵌 Ctrl+Z(按住 Ctrl 键的同时按 Z 键),然后按 Enter 或 Return 键。在 UNIX 系统中,包括 Mac OS X 系统中,文件结束符输入是用 Ctrl+D。
4 关键概念
- 输入运算符:std::cin >> value用于从标准输入读取数据。
- 流状态:istream对象的状态决定了循环是否继续。有效的流状态使循环继续,无效的流状态(如EOF或输入错误)使循环终止。
- 复合赋值运算符:sum += value是sum = sum + value的简写形式,用于累加值。