C# BMI计算器运行报System.FormatException输入字符串格式错误如何解决
异常原因
Unhandled exception. System.FormatException: Input string was not in a correct format
这个异常由int.Parse()方法抛出,触发原因有两点:
- 输入内容不符合整数格式:比如输入身高时填了
1.75这类带小数点的小数、输入了字母/符号、甚至直接回车留空,int.Parse()只能处理纯整数字符串,遇到不符合规则的输入就会直接抛出格式异常 - 业务逻辑不匹配:你的身高、体重变量都定义为
double双精度浮点类型,本身就需要支持小数输入,用int.Parse()做解析本身就不符合BMI计算的业务场景(身高大多是1点几米的小数、体重也常存在小数位)
修复方案
基础修复(适配浮点输入)
直接把int.Parse替换为double.Parse,适配身高体重的小数输入需求,修改对应两行代码即可:
Console.WriteLine("Enter Your Weight In kg"); double userWeight = double.Parse(Console.ReadLine()); Console.WriteLine("Enter Your Height In Meters"); double userHeight = double.Parse(Console.ReadLine());
优化方案(增加输入容错)
用double.TryParse()替代Parse方法,非法输入时给出友好提示,避免程序直接崩溃,完整优化后代码如下:
using System; namespace L2._7_BodyMassIndex { class Program { static void Main(string[] args) { Console.WriteLine("Body Mass Index Calculator."); Console.WriteLine("Enter Your Name"); string userName = Console.ReadLine(); Console.WriteLine("Enter Your Weight In kg"); double userWeight; while (!double.TryParse(Console.ReadLine(), out userWeight) || userWeight <= 0) { Console.WriteLine("输入不合法,请输入大于0的有效体重数值:"); } Console.WriteLine("Enter Your Height In Meters"); double userHeight; while (!double.TryParse(Console.ReadLine(), out userHeight) || userHeight <= 0) { Console.WriteLine("输入不合法,请输入大于0的有效身高数值:"); } double userHeightSqrd = Math.Pow(userHeight,2); double userBmi = (userWeight / userHeightSqrd); Console.WriteLine("============"); Console.WriteLine(userName); Console.WriteLine("============"); Console.WriteLine("Weight: " + userWeight); Console.WriteLine("Height: " + userHeight); Console.WriteLine("BMI: " + Math.Round(userBmi, 2)); } } }
内容的提问来源于stack exchange,提问作者JGommy
相关产品推荐
相关产品推荐

