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

C语言新手编写数组求和程序输出0的原因是什么?

代码问题分析
  • 核心错误:sum_of_elements 函数内层for循环的条件位置错误写入了sum = 0语句。for循环的第二部分是每次循环执行前都会运行的判断逻辑,你用逗号表达式把sum = 0和i < num写在一起,会导致每次进入循环前都把sum重置为0,循环结束后sum最终会被重置为0,自然输出结果为0。
  • 冗余逻辑:sum_of_elements 里写了两层完全不必要的嵌套for循环,外层循环没有任何实际作用,还和内层循环共用同一个全局变量i,容易出现计数混乱。
  • 不规范写法:i、num、sum都定义为全局变量完全没有必要,不仅浪费内存,还容易出现不同作用域的变量污染问题;数组作为参数传递时,建议同步传递数组长度,不要依赖全局变量传值,降低函数的复用性。
修复后的可运行代码
#include <stdio.h>

// 函数同时接收数组和数组长度,不依赖全局变量
int sum_of_elements(int arr[], int num) {
    int sum = 0;
    for (int i = 0; i < num; i++) {
        sum += arr[i];
    }
    return sum;
}

int main() {
    int num;
    printf("enter number of digits you want to add\n");
    scanf("%d", &num);

    int arr[num];

    for (int i = 0; i < num; i++) {
        printf("enter number %d\n", i + 1);
        scanf("%d", &arr[i]);
    }
    int total = sum_of_elements(arr, num);
    printf("%d", total);

    return 0;
}
修复说明
  • 删掉了多余的全局变量,所有变量改为对应作用域的局部变量,避免变量污染
  • 去掉了多余的嵌套for循环,只保留一层循环做累加
  • 把sum = 0移到了循环外的初始化位置,只会在求和开始前执行一次,不会每次循环都重置
  • 调整sum_of_elements的参数,新增数组长度参数,函数独立性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:36:03