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

C# 实现while循环多条件校验(输入合法性+数值范围)的报错问题

问题根因
  • 循环条件逻辑错误:你使用了短路与&&连接两个判断,只有「输入解析为数字成功 且 数值小于3不成立」时才会进入重试循环。当输入非数字时,double.TryParse返回false,&&直接短路,整个循环条件判定为不成立,直接跳出循环,后续执行double.Parse(userInput)时遇到非数字内容直接抛出异常,就是你遇到的崩溃问题。
  • 边界校验不全:缺少对身高下限的校验,负数、0这类非法数值也会被放过。
  • 重复解析冗余:循环退出后不需要再调用double.Parse解析输入,TryParse的out参数已经可以拿到合法的数值,重复解析既浪费性能也增加了出错风险。
正确实现代码
double height;
string userInput;
// 首次提示输入
Console.WriteLine("Enter Height in Meters only up to Maxmium of 3 meters");
userInput = Console.ReadLine().ToLower();

// 循环条件:只要解析失败 或 数值不在合法范围,就进入重试
while (!double.TryParse(userInput, out double heightM) || heightM <= 0 || heightM > 3)
{
    Console.Clear();
    Console.WriteLine("Incorrect value or input");
    Console.WriteLine();
    Console.WriteLine("Enter Height in Meters only up to Maxmium of 3 meters");
    userInput = Console.ReadLine().ToLower();   
}

// 循环退出时heightM已经是合法值,直接赋值即可
height = heightM;
逻辑说明
  • 循环使用短路或||连接判断,只要任意一个非法条件满足就进入重试:
    1. 输入无法解析为double类型
    2. 解析出的数值小于等于0(不符合身高常识)
    3. 解析出的数值大于3米(超出要求的上限)
  • 循环退出时必然所有非法条件都不满足,直接使用TryParse输出的heightM即可,无需二次解析,彻底避免解析崩溃问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:15:08