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
相关产品推荐
相关产品推荐

