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

浮点异常(core dumped)排查:求奇偶输入平均值程序报错定位

错误原因分析及修复方案

1. 局部变量未初始化引发的核心问题

C语言中局部变量默认会被分配随机垃圾值,你的代码里evenTotal、evenCount、oddTotal、oddCount、numReturn都没初始化:

  • 启动程序时numReturn是随机值,可能直接不满足numReturn !=0的循环条件,跳过输入逻辑。
  • 若用户直接输入0结束程序,evenCount或oddCount还是初始的垃圾值(大概率为0),执行evenTotal/evenCount或oddTotal/oddCount时会触发除以0,这就是Floating point exception (core dumped)错误的直接原因。

2. 终止条件0被错误统计

当输入0时,程序会进入偶数统计分支,把0算入偶数总和和计数,但0是终止信号,不该被纳入统计。


修复后的代码

#include <stdio.h>

int main()
{
    int numReturn = 1; // 初始化非0值,确保进入循环
    int evenTotal = 0;
    int evenCount = 0;
    int oddTotal = 0;
    int oddCount = 0;
    
    while(numReturn != 0){
        printf("Enter a positive integer: ");
        scanf("%d",&numReturn);
        
        if(numReturn < 0){
            printf("That's a negative number!\n");
        } else if(numReturn == 0){
            // 0是终止条件,跳过统计
            continue;
        } else if(numReturn % 2 == 0){
            evenTotal += numReturn;
            evenCount += 1;
        } else {
            oddTotal += numReturn;
            oddCount += 1;
        }
    }

    // 先判断计数是否为0,避免除以0
    double evenAvg = (evenCount == 0) ? 0.0 : (double)evenTotal / evenCount;
    double oddAvg = (oddCount == 0) ? 0.0 : (double)oddTotal / oddCount;
    
    printf("%d even numbers were entered and the average is %.2lf\n", evenCount, evenAvg);
    printf("%d odd numbers were entered and the average is %.2lf\n", oddCount, oddAvg);

    return 0;
}

修复说明

  • 所有局部变量初始化,消除垃圾值干扰。
  • 单独处理输入0的情况,不纳入统计逻辑。
  • 计算平均值前判断计数是否为0,彻底避免除以0异常。
  • 加入(double)强制类型转换,把整数除法转为浮点除法,保证平均值的小数精度(原代码中整数除法会丢失小数部分)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 01:20:02