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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:45:40