如何正确实现读取输入序列的while循环?含负数终止求和示例
问题解答
问题1:如何正确实现读取输入序列的while循环?
实现读取输入序列的while循环,核心是确保循环内能持续获取新的输入,同时设置合理的终止条件,常见两种实用写法:
先读再判断式循环:
适合终止条件依赖首次输入的场景,比如本题遇负数停止。步骤为:- 先读取第一个输入值
- 用while判断是否满足继续循环的条件
- 循环体内处理当前输入后,必须再次读取下一个输入,避免死循环
do-while循环:
适合需要至少执行一次读取的场景,先执行读取和处理,再判断是否继续:int num; do { cin >> num; // 处理输入的num } while (num >= 0); // 终止条件
如果输入可能出现非整数情况,还需额外判断cin状态(如cin.fail())避免死循环,本题针对整数输入可暂不考虑。
问题2:编写while循环对输入整数求和,遇负数停止(负数不计入)
你提供的初始代码存在两个关键问题:
- 循环体内未读取新输入,
numInput值不会更新,会陷入死循环 - 循环内多余输出
numInts,不符合仅输出最终总和的要求
修正后的代码:
#include <iostream> using namespace std; int main() { int numInput; int sum = 0; // 变量名改为sum,语义更直观 cin >> numInput; // 读取第一个输入 while (numInput >= 0) { sum += numInput; // 累加当前正整数 cin >> numInput; // 读取下一个输入,更新判断条件 } cout << sum << endl; // 输出最终总和 return 0; }
代码说明:
- 变量名
sum比numInts更贴合求和的语义 - 每次循环处理完当前正整数后,必须读取下一个输入,确保
numInput能更新,让循环正常终止 - 移除了循环内多余的
cout语句,仅在最后输出总和 - 测试输入
20 45 34 5 -44时,程序会累加20、45、34、5,遇到-44时退出循环,输出总和104,完全符合题目要求
内容的提问来源于stack exchange,提问作者christopher1133
相关产品推荐
相关产品推荐

