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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:07:22