Проблема с условиями в то время как l oop на C языке. || не подходит? - PullRequest
1 голос
/ 13 апреля 2020

Мне интересно, почему 0 или -20 не заканчиваются l oop. Надеюсь, вы поможете мне, ребята, потому что я застрял немного: (

#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;
}

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Измените это

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)

Чтобы указать диапазон дней, в течение которого вы можете оставаться в l oop, и диапазон, для которого выйдет l oop.

1 голос
/ 13 апреля 2020

Выражение:

days != 0 || days != -20

всегда будет истинным, поскольку независимо от значения days оно либо не будет равно 0 ИЛИ оно не будет равно -20 (и, возможно, обоим).

Вы хотите, чтобы выражение было истинным, только когда days не равно ни тому, ни другому. То есть, если оно не равно 0 И , оно не равно -20.

Так что просто замените оператор ИЛИ (|| ) с оператором AND (&&).

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

Это заставляет l oop повторяться, пока оба подвыражения верны.

...