继续 do while 循环

问题描述 投票:0回答:1

我有一个 do-while 循环,旨在从控制台中的用户输入中获取数字。 我添加了错误检查和许多可选变量以使其具有多功能性(即最小和最大允许值、必须包含输入的值数组以及用于任何特定不允许的输入值的 params 变量)。

重新设计循环以使用一些 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();
        if (!int.TryParse(numString, out num)) { continue; }
        if (permittedNums != null && !permittedNums.Contains(num)) { continue; }
    } while (num < min || num > max || exceptions.Contains(num));
    return num;
}

我检查以确保我的逻辑是正确的,以确保至少击中了 continue 语句,并且据我所知它应该有效,但它允许输入通过而无需再次运行循环。

我已经尝试查看其他问题,但找不到答案。

c# do-while continue
1个回答
0
投票

您没有提供详细的输入,但这种情况看起来很奇怪:

while (num < min || num > max || exceptions.Contains(num));

如果第一个输入不合法,

num
将为零。如果异常中没有
0
,因为
Int32.MinValue < 0 < Int32.MaxValue
,则不会满足任何条件并且循环结束。

我建议你先写下不同输入的列表,然后思考每个输入应该产生什么结果,然后你就会更清楚地想出逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.