代码跳过错误if语句,然后直接转到else if。
我需要圈通过,如果它小于2,那么它会走到错误,并再次回来,要求输入一个新的值。反之亦然。我是一个新程序员,发现C#的窗体很难理解。
int.TryParse(txtNumberOfLaps.Text, out laps);
while (laps < 2 && laps > 20)
{
if (laps < 2)
{
MessageBox.Show("Laps can't be less than 2", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else if (laps > 20)
{
MessageBox.Show("Laps can't be more than 20", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else if (laps > 2 && laps < 20)
{
break;
}
}发布于 2022-03-27 23:45:32
它跳到哪个else if?你的循环包含两个。我设想程序在启动循环之前就已经退出了,因为循环的前哨值是无法满足的。对于给定的整数n,20>n<2不存在。这实际上是不可能的。您可以通过检查while循环的每个条件是多少才能看到这一点。例如
n < 2最容易通过提供1来满足。
然而,n = 1使n > 20变得错误。另一方面,通过提供n > 20作为参数,21是最容易实现的。
n = 21使n<2的第一个条件变为假,因此循环永远不会开始
因此,在n的任何情况下,您的while循环都不会接收到初始的True值甚至开始。
现在这个问题已经解决了,让我们为您找到一个解决方案!:)
你要找的是这样的东西:
int.TryParse(txtNumberOfLaps.Text, out laps);
while(true)
{
if (laps < 2 || laps > 20)
{
MessageBox.Show("Laps must be in range 2-20", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
break;
}
else
{
// do other things
break;
}
}发布于 2022-03-27 23:26:39
据我所见,我认为您的代码没有进入while循环。您是在问laps < 2 AND laps > 20,而我认为您想要的是laps < 2 OR laps > 20。你的循环没有意义,因为你的数字不能同时大于20和小于2
发布于 2022-03-28 00:04:18
不会输入while循环,因为数字不能同时小于2和大于20。laps < 2 && laps > 20可能应该是laps < 2 || laps > 20。
纠正这一点,如果数字低于2或大于20,则输入while循环,但最后一个- if语句将永远不会为真。如果数字介于2到20之间,则不会输入while循环,因此无论如何都不会命中If语句。
下面是一个如何解决您所描述的问题的示例:
while (true)
{
Console.WriteLine("Please enter a number between 2 and 20:");
var input = Console.ReadLine();
if (!int.TryParse(input, out var number))
{
// the input could not be parsed
Console.WriteLine("Please enter a proper numeric value.");
}
else if (number < 2)
{
Console.WriteLine("The number can't be less than 2.");
}
else if (number > 20)
{
Console.WriteLine("The number can't be more than 20.");
}
else
{
// if all if-statements above are false, the number must be between 2 and 20
Console.WriteLine($"You entered {number}. Good job!");
break;
}
}您发布的代码看起来就像您第一次学习编程时需要解决的早期问题之一。这有点像一个诡计问题,在那里你会发现多个缺陷。
https://stackoverflow.com/questions/71641013
复制相似问题