C语言输入0终止的for循环统计奇偶和代码故障排查
代码问题定位
你的代码无法正常运行是几个基础错误导致的:
- 非法数组定义:
int i = 0, num[i]这行里,i初始值为0,相当于定义了一个长度为0的数组,没有任何可用内存空间存储输入值,后续往num[i]写数据属于越界访问内存,大概率直接触发程序崩溃。而且这个需求根本不需要存储所有输入的数,每次读一个判断完奇偶直接累加就行,完全没必要定义数组。 - 累加变量未初始化:
even和odd是存储偶数和、奇数和的变量,你没给它们赋初始值0,运行时这两个变量会携带内存里的随机垃圾值,最后算出来的结果完全错误。 - 分支语法不规范:else后面没加花括号,C语言里else默认只管辖紧跟在它后面的第一条语句,你原来的写法里
i++是不管当前数是奇数还是偶数都会执行的,属于逻辑隐患。 - 冗余无效代码:定义的
sum变量全程没用到,属于多余代码。
修正后可正常运行的代码
#include <stdio.h> #include <stdlib.h> int main() { int num, even = 0, odd = 0; for (;;) { printf("Write a number: "); scanf("%d", &num); // 输入0直接终止循环 if (num == 0) { break; } if (num % 2 == 0) { even += num; } else { odd += num; } } printf("Sum of even is: %d\n", even); printf("Sum of odd is: %d\n", odd); return 0; }
补充说明
上面的代码完全符合题目要求,通过for循环持续读取用户输入,读到0就跳出循环,读取过程中实时判断数字奇偶性分别累加,循环结束后打印统计结果即可。
如果要严格把结束判断写在for循环的语句头里,也可以写成下面的形式,运行效果完全一致:
for (printf("Write a number: "); scanf("%d", &num), num != 0; printf("Write a number: ")) { if (num % 2 == 0) { even += num; } else { odd += num; } }
内容的提问来源于stack exchange,提问作者Younis
相关产品推荐
相关产品推荐

