C 语言中 while 循环中的条件问题。 ||不适合?

Issue with conditions in while loop in C language. || doesn't fit?

我想知道为什么 0 或 -20 不结束循环。希望你们能帮助我,因为我有点卡住了:(

#include <stdio.h>

int main()
{
   int days;
   printf("Please insert number of days: ");
   scanf("%d", &days);

   while(days != 0 || days != -20)
    {
      printf("%d days are %d week(s) and %d day(s). (0 or - 20 to quit)",
               days, days/7, days%7 );
      scanf("%d", &days);
    }
   return 0;
}

表达式:

days != 0 || days != -20

将永远为真,因为无论 days 的值是什么,它要么不等于 0 要么 它不会等于 -20(也可能两者都等于)。

您希望表达式仅在 days 不等于任何一个时为真。也就是说,如果不等于 0 AND 则不等于 -20.

因此只需将 OR 运算符 (||) 替换为 AND 运算符 (&&)。

while(days != 0 && days != -20)
{
}

只要两个子表达式都为真,循环就会重复。

改变这个

while(days != 0 || days != -20)//will never exit loop, because days cannot be
                               //both -20 and 0 at the same time.

while(days != 0 && days != -20) // if one or the other is false, loop will exit.
                                // i.e. True && False == 1 && 0 == false -> exit loop

获得您期望的行为。

但也可以表示为:

while(days <= 0 && days >= -20)

提供允许您保持循环的天数范围,以及退出循环的范围。