C#如何实现用户输入带点而非逗号的小数到double变量时的错误提示
实现方案
你需要的小数分隔符格式校验逻辑,只需要先留存用户输入的原始字符串做格式检测,再配合指定解析规则即可实现,同时顺便修正你原有代码里的几处问题:
- 原代码第三个校验分支存在变量名拼写错误,定义的
ossz3后续调用了不存在的res3,会直接触发编译报错 - 三角不等式判断不全,仅校验了
a+b>c,缺少a+c>b、b+c>a两组判断,会出现逻辑漏洞 - 原有三个判断分支逻辑完全冗余,没必要重复写多遍
完整修改后代码
using System; using System.Globalization; namespace HW_002_01 { class Program { // 封装统一的边长输入校验方法 static double GetValidSide(string prompt) { while (true) { Console.Write(prompt); string input = Console.ReadLine().Trim(); // 检测是否使用点作为小数分隔符,命中直接报错 if (input.Contains('.')) { Console.WriteLine("错误:请使用逗号作为小数分隔符,请勿输入点"); continue; } // 指定用逗号作为小数分隔符的规则解析,避免系统区域设置影响结果 NumberFormatInfo format = new NumberFormatInfo() { NumberDecimalSeparator = "," }; if (double.TryParse(input, NumberStyles.Float, format, out double side) && side > 0) { return side; } Console.WriteLine("错误:请输入合法的正数值"); } } static void Main(string[] args) { double a = GetValidSide("Please enter the length of the triangle's a side (cm)! "); double b = GetValidSide("Please enter the length of the triangle's b side (cm)! "); double c = GetValidSide("Please enter the length of the triangle's c side (cm)! "); // 补全三角不等式的三组判断 if (a + b > c && a + c > b && b + c > a) { Console.WriteLine("Triangle equality is present."); } else { Console.WriteLine("Triangle equality is not present."); } Console.ReadKey(); } } }
核心改动说明
- 单独封装了输入校验方法,统一处理格式检测、解析逻辑,避免代码重复
- 先读取原始输入字符串检测是否包含
.,命中直接弹出你需要的分隔符错误提示 - 手动指定解析规则用逗号作为小数分隔符,不会受操作系统默认区域设置的影响
- 补全了三角不等式的判断逻辑,避免边长输入顺序不同导致的判断错误
- 加入了循环重试逻辑,用户输入错误不需要重启程序就可以重新输入
内容的提问来源于stack exchange,提问作者TheAestheticFur
相关产品推荐
相关产品推荐

