我有一个 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 语句,并且据我所知它应该有效,但它允许输入通过而无需再次运行循环。
我已经尝试查看其他问题,但找不到答案。
您没有提供详细的输入,但这种情况看起来很奇怪:
while (num < min || num > max || exceptions.Contains(num));
如果第一个输入不合法,
num
将为零。如果异常中没有 0
,因为 Int32.MinValue < 0 < Int32.MaxValue
,则不会满足任何条件并且循环结束。
我建议你先写下不同输入的列表,然后思考每个输入应该产生什么结果,然后你就会更清楚地想出逻辑。