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

求助:如何实现用户输入控制次数的循环方法?代码异常排查

问题排查
  • 语法错误:for (int i = 0; i < val; i++)后无任何语句或代码块,编译器会报错;且该循环位置错误,既不该放在输入验证前,也不应混入输入方法内部。
  • 输入验证逻辑失效:while循环在输入非法值时,仅打印提示就执行break,不会让用户重新输入,直接返回非法值,完全起不到校验作用。
  • 未处理非数字输入:使用Convert.ToInt32(Console.ReadLine())时,若用户输入非数字内容,会直接抛出格式异常导致程序崩溃。
  • 职责混淆:InputValue方法核心应为获取合法输入,但原代码把循环执行逻辑混在其中,违背单一职责原则。
解决方法

1. 重构输入方法:仅负责获取合法范围内的数字输入

修正后的方法需要循环接收输入直至合法,处理非数字输入的异常,严格校验值在min和max范围内。

2. 在Main中调用输入方法,获取值后执行对应次数的循环

完整修正代码

using System;

class Program
{
    public static int InputValue(int min, int max)
    {
        int val;
        bool isValidInput;
        
        do
        {
            Console.WriteLine($"Enter a number between {min}-{max}:");
            isValidInput = int.TryParse(Console.ReadLine(), out val);
            
            // 验证输入合法性:非数字或超出范围都提示错误
            if (!isValidInput || val < min || val > max)
            {
                Console.WriteLine($"Invalid input! Please enter a number between {min} and {max}.");
            }
        } while (!isValidInput || val < min || val > max);
        
        return val;
    }

    static void Main()
    {
        // 获取用户指定的循环次数
        int loopCount = InputValue(1, 30);
        
        // 根据输入次数执行循环
        Console.WriteLine($"Executing loop {loopCount} times:");
        for (int i = 0; i < loopCount; i++)
        {
            Console.WriteLine($"Loop iteration {i + 1}");
        }
    }
}

代码说明

  • 用int.TryParse替代Convert.ToInt32:避免非数字输入引发的异常,通过返回布尔值标记输入是否有效。
  • do-while循环:确保至少提示用户输入一次,直到输入合法才退出循环。
  • 分离职责:InputValue仅做输入校验,循环执行逻辑放在Main中,代码结构更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:40:43