C语言数组偶数累加奇数累减程序输出0而非预期值2问题求解
核心问题原因
你的代码中仅执行了total + data[i]和total - data[i]两个表达式运算,但没有将运算结果赋值回total变量,这类无赋值的表达式不会改变total的取值,因此total永远是初始值0,最终返回结果恒为0。
修复方法
将对应行的运算改为赋值操作即可,推荐使用C语言的复合赋值运算符简化写法:
- 偶数分支的
total + data[i];修改为total += data[i]; - 奇数分支的
total - data[i];修改为total -= data[i];
如果不使用复合赋值,也可以写为完整的赋值语句:
- 偶数分支:
total = total + data[i]; - 奇数分支:
total = total - data[i];
修复后完整代码
#include <stdint.h> #include <stdio.h> int add_even_sub_odd(const int data[], int n) { int total = 0; // 可选优化:将i的类型改为int,避免size_t和int类型比较的编译警告 for (int i = 0; i < n; i++) { if (data[i] % 2 == 0) { total += data[i]; printf("%d\n", data[i]); } else { total -= data[i]; printf("%d\n", data[i]); } } return total; } int main(void) { int data[4] = {1, 2, 3, 4}; printf("%d\n", add_even_sub_odd(data, 4)); }
结果验证
针对测试用例{1,2,3,4},偶数和为2+4=6,奇数和为1+3=4,6-4=2,和预期输出完全匹配。
内容的提问来源于stack exchange,提问作者Amanda_C
相关产品推荐
相关产品推荐

