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

C语言累加求和程序输出异常求助:无法逐次打印累加结果

程序问题分析与修正

任务要求:编写程序,用户输入数字时将其累加到总和,每次输入后打印当前总和,输入0时程序终止。

我的代码如下:

#include <stdio.h>
int main(){ 
    
    int n;
    int i;
    int sum = 0;
        
   for(i=0; i<=n; i++){
     scanf("%d", &i);
       if(i==0){
           break;
       }
       sum += i;
   }
    printf("%d\n", sum);
    return 0;
}

输出不符合预期:输入1、2、3、4、5、0时,预期输出为1、3、6、10、15,但目前仅输出最终总和15。

问题点分析

  • 未实现每次输入后的打印逻辑:代码只在循环结束后打印最终总和,完全没完成"每次输入后打印当前总和"的核心要求,这是输出不符合预期的直接原因。
  • 循环逻辑存在错误:
    • 变量n未初始化就用于循环条件i<=n的判断,属于未定义行为,程序运行时可能出现随机异常。
    • 将循环控制变量i作为输入接收变量,直接破坏了for循环的计数逻辑,容易引发不可预料的循环异常。
  • 输入格式注意事项:如果输入是逗号分隔的数字,scanf("%d")只会读取第一个有效数字,后续逗号会被视为无效输入,建议按回车逐个输入数字。

修正后的代码

#include <stdio.h>
int main(){ 
    int num;
    int sum = 0;
        
    while(1){ // 无限循环,输入0时终止
        scanf("%d", &num);
        if(num == 0){
            break;
        }
        sum += num;
        printf("%d\n", sum); // 每次累加完成后立即打印当前总和
    }
    return 0;
}

修正说明

  • 使用while(1)创建无限循环,比for循环更适配这种不确定循环次数的场景,逻辑更直观清晰。
  • 单独用num变量接收输入,避免占用循环控制变量,防止逻辑混乱。
  • 每次累加后立即调用printf输出当前总和,完全满足任务要求。
  • 删除了未使用且未初始化的变量n,简化代码的同时避免了未定义行为。

内容的提问来源于stack exchange,提问作者Hassan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:10:43