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

C语言程序满足条件却触发else分支的问题排查

问题分析与解决:未初始化变量导致的计算异常

你的代码在输入1.90、1.90、1.90时触发非法提示,核心问题是变量average未初始化,并非float精度问题。

问题原因

C语言中,局部变量若未显式初始化,会存储随机的垃圾值。你的代码里仅声明了float average;,未赋予初始值,执行average+=height;时,是将输入的身高值加到随机垃圾值上,最终计算结果完全偏离预期,自然触发非法判断。

以输入三个1.90为例,正确计算应为:
(1.9*3 + 2.06)/4 = 7.76/4 = 1.94
但因average初始为随机值,实际计算结果是(随机值 + 1.9+1.9+1.9 +2.06)/4,大概率不在1.900-2.100范围内。

修复方案

只需给average初始化0值即可:

float average = 0.0f;

修改后的完整代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
     printf("Please enter the heights of 3 players\n");
     float average = 0.0f; // 初始化变量
     float height;
     for (int i=0; i<3; i++)
     {
         scanf("%f", &height);
         average+=height;
     }
     average = (average + 2.06)/4; // 无需强制转float,运算数已兼容
     if (average<1.900 || average>2.100) 
         printf("Illegal heights average, your average %.3f isn’t approved\n",average);
     else 
         printf("Your heights average is %.3f, welcome to space jam tournament!!\n",average); 
    return 0;
}

额外提示

  • 局部变量(包括int、float等基本类型)必须显式初始化,避免垃圾值引发的隐蔽逻辑错误。
  • 原代码中的(float)((average + 2.06)/4)强制类型转换是多余的,average为float类型,2.06为double类型,运算时会自动做类型提升,直接去掉转换更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:30:46