C#程序输入验证循环与除法精度优化问题求助
解决输入验证循环与除法小数显示问题
问题分析
原代码存在两个核心问题:
- 输入验证仅提示错误,未实现循环重新输入逻辑,且第二个数字读取时未更新
input变量,导致验证完全无效 - 除法运算使用整数除法,结果自动截断为整数,无法显示小数部分
解决方案
1. 实现循环输入验证
封装一个可复用的输入验证方法,通过do-while循环持续提示用户输入,直到输入有效整数为止。
2. 优化除法运算结果
将参与除法的整数转换为double类型触发浮点除法,再通过格式化字符串控制小数显示位数。
修改后的完整代码
internal class Program { static void Main(string[] args) { // 获取第一个有效整数 int num1 = GetValidIntegerInput("Enter a number: "); // 获取第二个有效整数 int num2 = GetValidIntegerInput("Enter another number: "); // 加法运算 Console.WriteLine("{0} + {1} = {2}", num1, num2, num1 + num2); // 减法运算 Console.WriteLine("{0} - {1} = {2}", num1, num2, num1 - num2); // 乘法运算 Console.WriteLine("{0} x {1} = {2}", num1, num2, num1 * num2); // 除法运算:转换为double实现浮点除法,保留3位小数 if (num2 != 0) { double divisionResult = (double)num1 / num2; Console.WriteLine("{0} / {1} = {2:F3}", num1, num2, divisionResult); } else { Console.WriteLine("Error: Cannot divide by zero"); } Console.ReadLine(); } // 复用的输入验证方法 static int GetValidIntegerInput(string prompt) { int validNumber; do { Console.Write(prompt); string input = Console.ReadLine(); if (int.TryParse(input, out validNumber)) { break; } Console.WriteLine("This is not a number"); } while (true); return validNumber; } }
关键改动说明
- 输入验证:
GetValidIntegerInput方法封装了循环逻辑,每次输入无效时提示要求的错误信息,直到用户输入正确整数 - 除法优化:通过
(double)num1将整数转换为浮点型,避免整数除法的截断问题;使用{2:F3}格式化字符串强制显示3位小数(可根据需求调整位数) - 额外优化:增加除数为0的判断,避免程序抛出运行时异常
内容的提问来源于stack exchange,提问作者SengueDreams
相关产品推荐
相关产品推荐

