CS0103错误:BMI计算器中BMIformula未在当前上下文定义
解决CS0103错误并修复你的BMI计算器
首先,咱们先搞定你遇到的CS0103错误:这个错误的原因很简单——你在使用BMIformula变量之前,没有声明它的类型。C#是强类型语言,所有变量在第一次使用前必须明确声明类型(比如double、int这类)。
除了这个错误,你的代码还有两个关键问题需要修复,不然计算出来的BMI结果完全不对:
- BMI的计算公式写错了:正确的BMI公式是
体重(kg) ÷ (身高(m))²,你现在写的bodyWeight / bodyHeight * bodyHeight其实等价于bodyWeight,完全不符合逻辑,而且你输入的身高是厘米,得先转换成米(除以100) - 整数除法的精度问题:
bodyWeight和bodyHeight都是int类型,直接做除法会截断小数部分,导致BMI计算结果严重不准,需要转成double类型来计算
下面是修正后的完整代码,每处修改都加了注释:
// 先声明BMIformula的类型为double,初始化为0 double BMIformula = 0; Console.WriteLine("Geben Sie Körpergewicht ein: "); // 这里可以考虑加输入验证,防止用户输入非数字的情况 int bodyWeight = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Geben Sie Ihre Körpergröße in cm ein: "); int bodyHeight = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Ihre Eingaben: Körpergewicht: {0} Körpergröße: {1}", bodyWeight, bodyHeight); // 修正BMI计算公式:先把身高转成米(除以100.0,用浮点除法),然后计算平方,再用体重除以这个值 BMIformula = bodyWeight / Math.Pow(bodyHeight / 100.0, 2); // 输出BMI值,保留两位小数更直观 Console.WriteLine("Der BMI beträgt: {0:F2}", BMIformula); // 修正判断条件的边界(比如原来的<=20和>=20会重复,改成<20更合理) if (BMIformula < 20) { Console.WriteLine("Du bist im Untergewicht!"); } else if (BMIformula >= 20 && BMIformula < 25) { Console.WriteLine("Du bist im Normalgewicht"); } else if (BMIformula >= 25 && BMIformula < 30) { Console.WriteLine("Du bist Übergewichtig"); } else if (BMIformula >= 30 && BMIformula < 40) { Console.WriteLine("Du hast Adipositas"); } else { Console.WriteLine("Du hast Massive Adipositas"); } Console.ReadLine();
额外提个优化点:当前代码没有处理用户输入非数字的情况(比如用户输入字母),会直接抛出异常。如果要更健壮,可以用int.TryParse来验证输入,比如:
int bodyWeight; Console.WriteLine("Geben Sie Körpergewicht ein: "); while (!int.TryParse(Console.ReadLine(), out bodyWeight)) { Console.WriteLine("Bitte geben Sie eine gültige Zahl ein!"); }
这样用户输入错误时会提示重新输入,程序不会崩溃。
内容的提问来源于stack exchange,提问作者Slime
相关产品推荐
相关产品推荐

