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

引入continue语句后,C#控制台do-while循环输入校验失效问题

问题分析与修复

你的代码问题出在continue语句跳过校验后,循环条件没有覆盖所有不合法场景,同时未正确处理解析失败时的num默认值,导致误判:

  1. 当int.TryParse失败时,num会被赋值为默认值0。此时continue直接跳转到while条件判断,如果0刚好在min-max范围内且不在exceptions数组里,循环会直接终止,返回错误的0,不会重试输入。
  2. 当输入的数字不在permittedNums列表中时,continue跳过后续逻辑,但此时num是一个合法整数,若它满足num >= min && num <= max && !exceptions.Contains(num),循环同样会直接终止,返回不被允许的数值。

修复方案一:整合所有校验到循环条件(更简洁)

把所有不合法条件都放到while判断里,去掉continue,确保只要有一项不满足就重新循环:

public static int GetNumber(int min = int.MinValue, int max = int.MaxValue, string prompt = "Number", int[] permittedNums = null, params int[] exceptions)
{
    string? numString;
    int num;
    do
    {
        Console.Write($"{prompt}: ");
        numString = Console.ReadLine();
        ClearConsoleLine();
    } while (!int.TryParse(numString, out num) 
             || (permittedNums != null && !permittedNums.Contains(num))
             || num < min 
             || num > max 
             || exceptions.Contains(num));
    return num;
}

修复方案二:保留continue,引入合法性标记

如果要保留continue的逻辑,需要添加一个isValid标记,只有当所有校验都通过时才标记为合法,循环条件改为判断标记:

public static int GetNumber(int min = int.MinValue, int max = int.MaxValue, string prompt = "Number", int[] permittedNums = null, params int[] exceptions)
{
    string? numString;
    int num;
    bool isValid;
    do
    {
        isValid = false;
        Console.Write($"{prompt}: ");
        numString = Console.ReadLine();
        ClearConsoleLine();
        
        if (!int.TryParse(numString, out num))
        {
            continue;
        }
        
        if (permittedNums != null && !permittedNums.Contains(num))
        {
            continue;
        }
        
        // 所有校验通过,标记为合法
        if (num >= min && num <= max && !exceptions.Contains(num))
        {
            isValid = true;
        }
    } while (!isValid);
    return num;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:00:33