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
相关产品推荐
相关产品推荐

