c#无限do while循环

本文关键字:循环 while do 无限 | 更新日期: 2023-09-27 18:04:19

谁能告诉我为什么它会无限循环?

       bool rat1 = (ratswitch == 1);
       bool rat2 = (ratswitch == 2);
       bool rat3 = (ratswitch == 3);
       bool rat4 = (ratswitch == 4);
       bool rat5 = (ratswitch == 5);
       do
       {
           Console.WriteLine("Podano bledna ocene, uzyj liczb calkowitych z zakresu 1-5.");
           ratswitchstring = Console.ReadLine();
           while (ifintrat != true)
           {
               Console.WriteLine("Podano bledna ocene, uzyj liczb calkowitych z zakresu 1-5.");
               ratswitchstring = Console.ReadLine();
               ifintrat = int.TryParse(ratswitchstring, out ratswitch);
           }
           ratswitch = Convert.ToInt32(ratswitchstring);
           rat1 = (ratswitch == 1);
           rat2 = (ratswitch == 2);
           rat3 = (ratswitch == 3);
           rat4 = (ratswitch == 4);
           rat5 = (ratswitch == 5);
       }
       while (rat1 == false || rat2 == false || rat3 == false || rat4 == false || rat5 == false);

我用调试器运行它,当我放置1或2时,它将其中1切换为true,例如,所以我认为问题是在while条件中。有什么想法吗?

c#无限do while循环

       rat1 = (ratswitch == 1);
       rat2 = (ratswitch == 2);
       rat3 = (ratswitch == 3);
       rat4 = (ratswitch == 4);
       rat5 = (ratswitch == 5);

只有一个可能是真的。

while (rat1 == false || rat2 == false || rat3 == false || rat4 == false || rat5 == false)

所以至少有4个是假的。也许你需要&&(and)而不是|| (or)?

当rat1, rat2, rat3, rat4或rat5为假时,while条件将循环。看看前面的5行代码;这些布尔值中的一个总是为真,而其他的都为假。

以下行只有一行为真,其他为假

       rat1 = (ratswitch == 1);
       rat2 = (ratswitch == 2);
       rat3 = (ratswitch == 3);
       rat4 = (ratswitch == 4);
       rat5 = (ratswitch == 5);

因此,你的条件总是求值为true

  . . . 
} 
while (true || true || true || true || false) // only one condition will return false

退出循环,当任何rat1 ....Rat5是真的,你应该写

 while (rat1 == false && rat2 == false && rat3 == false && rat4 == false && rat5 == false)

ratswitch不能同时等于5个值,因此rat1,rat2,rat3,rat4,rat5中至少有4个为假,并将继续循环。尝试使用&&代替||

假设您希望在其中一个开关变为真值时退出循环,您需要更改while条件:

while (rat1 == false && rat2 == false && rat3 == false && rat4 == false && rat5 == false)

只要你的rat值中有一个等于false,循环就会继续执行。

就像你现在拥有的那样,唯一能结束它的情况是把你所有的值都设为真,而不是像你想的那样只有一个。

尝试用and和(&&)更改or (||),它应该执行,直到其中一个rat值更改为true,然后它将结束。