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

C语言编写BMI计算程序为何运行结果始终输出0.0000000

BMI计算结果恒为0.000000的原因

问题出在自定义bmi函数的参数定义不符合C语言类型要求,触发了隐式类型规则的bug:

  • 你写的double bmi(w,h)没有给形参w、h显式指定数据类型,在C89标准的隐式声明规则下,未标注类型的形参会被默认识别为int整型。
  • 传入函数的体重、身高都是double类型的浮点数,类型不匹配会导致参数值被错误解析,加上编译器无法从错误的函数定义里拿到正确的类型信息,对返回值的内存解析也会出错,最终除法计算的结果被错误解释后,输出就恒为0.000000。
修复方案

给bmi函数的形参明确标注double类型即可,修正后的完整代码参考:

#include <stdio.h>
#include <math.h>

// 明确标注形参类型为double
double bmi(double w,double h){ 
    double bmi = w/h;
    return bmi;
}

int main() {
    double height;
    double weight;
    printf("Enter your height in meters: ");
    scanf("%lf", &height);
    height = pow(height, 2);
    printf("Enter your weight in kilograms: ");
    scanf("%lf", &weight);
    printf("Your BMI is %f\n", bmi(weight, height));
    return 0;
}

补充说明:如果要使用旧版K&R风格的C函数定义,需要在参数列表括号外单独声明形参类型,否则都会按默认int处理,非常容易出现这类类型不匹配的隐蔽bug。日常写C代码建议全程使用标准的函数声明写法,明确给所有参数、返回值标注对应类型,编译时也可以打开-Wall警告参数,这类隐式类型问题编译器会直接抛出警告提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.09 16:15:43