You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确实现读取输入序列的while循环?含负数终止求和示例

问题解答

问题1:如何正确实现读取输入序列的while循环?

实现读取输入序列的while循环,核心是确保循环内能持续获取新的输入,同时设置合理的终止条件,常见两种实用写法:

  • 先读再判断式循环:
    适合终止条件依赖首次输入的场景,比如本题遇负数停止。步骤为:

    1. 先读取第一个输入值
    2. 用while判断是否满足继续循环的条件
    3. 循环体内处理当前输入后,必须再次读取下一个输入,避免死循环
  • do-while循环:
    适合需要至少执行一次读取的场景,先执行读取和处理,再判断是否继续:

    int num;
    do {
        cin >> num;
        // 处理输入的num
    } while (num >= 0); // 终止条件
    

如果输入可能出现非整数情况,还需额外判断cin状态(如cin.fail())避免死循环,本题针对整数输入可暂不考虑。

问题2:编写while循环对输入整数求和,遇负数停止(负数不计入)

你提供的初始代码存在两个关键问题:

  1. 循环体内未读取新输入,numInput值不会更新,会陷入死循环
  2. 循环内多余输出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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 09:42:05