如何调试我的C++ BMI计算器程序?变量类型及代码错误排查求助
解决你的BMI计算器问题
嘿,刚学C++遇到这种问题太正常了,我来帮你拆解代码里的坑,顺便聊聊数据类型的选择~
先说说代码里的几个关键错误:
- 变量声明的乌龙:你写的
int height_user();根本不是声明整型变量,而是声明了一个返回值为int、无参数的函数!正确的变量声明应该是int height_user;,不过后面我们会说为啥用int存身高根本不合适。 - BMI计算公式完全写错了:正确的BMI公式是
体重(kg) / (身高(m)的平方),你现在写的weight / height * height其实等价于weight(除法和乘法优先级相同,从左到右计算,直接抵消了),这肯定出不了正确结果。而且用int类型做除法会直接截断小数,比如60kg除以1.7m(如果用int存身高只能存1),结果就是60/1*1=60,完全不符合实际。 - 输入输出不匹配:身高是带小数的数值(比如1.75m),用int类型存储会直接砍掉小数部分,导致数据完全失真。
关于数据类型的选择:
当然应该用double或者float!身高和体重都是带小数的数值,int只能存整数,完全满足不了需求。double的精度比float更高,计算BMI这种场景用double会更准确,不过用float也能搞定。
修正后的完整代码:
#include <iostream> using namespace std; // 改用double类型参数,计算正确的BMI double bmi_calc(double height, double weight){ double bmi_user = weight / (height * height); return bmi_user; } int main() { double weight_user; double height_user; // 正确声明变量,不再是函数声明 cout << "Enter your weight in kilograms: "; cin >> weight_user; cout << "Enter your height in meters: "; cin >> height_user; cout << "Your BMI is " << bmi_calc(height_user, weight_user) << endl; }
额外小提示:
- 公式里的括号一定要加:
height * height必须用括号括起来,不然会因为运算符优先级问题,先算weight / height再乘height,结果还是weight。 - 如果想让BMI结果保留两位小数,可以加上
#include <iomanip>头文件,然后输出时写cout << fixed << setprecision(2) << bmi_calc(height_user, weight_user) << endl;,看起来更专业。
内容的提问来源于stack exchange,提问作者SepiaAR16
相关产品推荐
相关产品推荐

