You need to enable JavaScript to run this app. C# 加法计算器如何实现输入无效后重新请求用户输入
优惠活动
大模型
产品
解决方案
定价
更多

C# 加法计算器如何实现输入无效后重新请求用户输入

核心问题定位
  • 输入流程的循环逻辑完全未闭环:单个数字输入无效时,你定义了TryAgain标记变量但没有用它控制循环回退,既不重新索要当前位置的输入,也不阻止流程推进到下一个输入项,导致无效输入对应的数组位置保留上一次计算的残留值,后续求和时就会把旧值叠进去
  • 无输入校验的硬转换风险:获取输入数量时直接用int.Parse、获取单个数字时冗余的Parse逻辑,会在用户输入非数字字符时直接触发程序崩溃,且没有校验输入数量是否超过数组最大长度10,容易触发数组越界异常
  • 重试交互逻辑冗余:原代码在输入无效时额外弹出“要不要重试”的问询,不符合“无效输入直接重新请求”的核心需求,反而增加无意义的交互步骤
修正后实现
class MainClass
{
    const int MaxInputCount = 10; // 定义数组最大容量,避免硬编码魔法值
    public static void Main(string[] args)
    {
        Console.WriteLine("Hello Ulises Sanchez");
        float[] userInput = new float[MaxInputCount];
        int numberOfUserInputs;
        string doMoreFunctions = "Add More Numbers Together - y = yes - anything else for no";
        bool moreActions;

        do
        {
            Console.Clear();
            Array.Clear(userInput, 0, userInput.Length);
            numberOfUserInputs = GetUserInput(userInput);
            Summation(userInput, numberOfUserInputs);

            moreActions = false;
            Console.WriteLine(doMoreFunctions);
            string inputString = Console.ReadLine();
            if (inputString == "y" || inputString == "Y") 
                moreActions = true;
        } while (moreActions);
    }

    static int GetUserInput(float[] inputArray)
    {
        string userInputPrompt = "How many numbers do you want to enter?";
        string errorMessage = "Invalid Input, please try again";
        int numberOfInputs;

        // 第一步:循环直到获取有效的输入数量
        while (true)
        {
            Console.Write(userInputPrompt);
            string inputString = Console.ReadLine();
            // 校验:必须是整数、范围在1到数组最大长度之间
            if (int.TryParse(inputString, out numberOfInputs) 
                && numberOfInputs >=1 
                && numberOfInputs <= inputArray.Length)
            {
                break;
            }
            Console.WriteLine(errorMessage);
        }

        // 第二步:逐个获取数字,无效输入直接卡当前步骤,不推进索引
        for (int i = 0; i < numberOfInputs; i++)
        {
            while (true)
            {
                Console.Write("Enter variable number {0}: ", i + 1);
                string inputString = Console.ReadLine();
                if (float.TryParse(inputString, out float result))
                {
                    inputArray[i] = result;
                    break;
                }
                Console.WriteLine(errorMessage);
            }
        }
        return numberOfInputs;
    }

    static void Summation(float[] inputArray, int numberOfInputs)
    {
        float summationResult = 0.0f;
        for (int i = 0; i < numberOfInputs; i++)
        {
            summationResult += inputArray[i];
        }
        Console.WriteLine("Summation = {0}", summationResult);
    }   
}
关键逻辑说明
  • 每一个用户输入节点,都单独配置了「收到有效输入才退出」的内层循环:输入无效时直接打印提示,原地重新索要当前位置的输入,不会推进流程到下一个步骤,也不会残留无效值
  • 所有类型转换全部使用TryParse实现,从根源避免非数字输入导致的程序直接崩溃
  • 每次进入新的计算流程前,强制清空整个输入数组,彻底杜绝上一轮计算的残留数据参与下一轮求和
  • 移除了冗余的“是否重试”问询,输入错误时直接请求当前位置的有效输入,交互流程更贴合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 00:36:05