Не-функция do while l oop in C - PullRequest
4 голосов
/ 20 июня 2020

Я новичок в программировании и надеялся получить некоторую помощь. Я пытаюсь создать «do while» l oop in C как часть набора задач CS50. Я пытаюсь использовать два разных условия в «while», но по какой-то причине они не распознаются. Вот мой код

#include <stdio.h>
#include <cs50.h>

int get_height(void);

int main(void)

{
    int height = get_height();
    printf("you picked %i\n", height);
}

int get_height(void)
{
    int height;
    do
    {
        height = get_int("enter height\n");
    }
    while (height > 8 && height < 1);
    return height;
}

Я пытаюсь заставить пользователя ввести целое число меньше 8, но больше 0. Если я выберу одно из двух условий, это единственное условие сработает. Однако, если я пытаюсь использовать оба условия, код компилируется и запускается, но это не заставляет меня вводить число в указанных параметрах. Я могу просто ввести любой номер, и он будет принят. Кто-нибудь может помочь?

EDIT: Мне неловко. Я неправильно понял, как работают операторы AND.

Ответы [ 3 ]

2 голосов
/ 20 июня 2020

Ваше условие гласит: «Продолжайте l oop, если height больше 8 И height меньше 1». Это условие никогда не будет истинным, поэтому l oop завершится после первой итерации.

Вы хотите «продолжить l oop, если height больше 8 ИЛИ height меньше чем 1 "

while (height > 8 || height < 1);
2 голосов
/ 20 июня 2020

Они являются взаимоисключающими:

while (height > 8 && height < 1);

Вы, вероятно, захотите:

while (height > 8 || height < 1);

Теперь, если значение больше 8 или меньше 1, l oop будет идет.

1 голос
/ 20 июня 2020

Я думаю, что математики еще не нашли целое число, которое может быть одновременно меньше 1 и больше 8.

while (height > 8 && height < 1);

Очевидно, вы имеете в виду

while (height > 8 || height < 1);

Но чтобы сделать такое условие более понятным для себя, иногда полезно сначала написать условие, по которому ищется число.

Вам нужно число, которое лежит в диапазоне [1, 8] то есть целевое число должно удовлетворять условию

1 <= height && height <= 8

В этом случае условие в операторе do-while будет отрицанием условия выше.

while ( !( 1 <= height && height <= 8 ) );

Теперь, если удалите отрицание, у вас будет

while ( !( 1 <= height ) || !( height <= 8 ) );

, что эквивалентно

while ( 1 > height || height > 8 );

Так что либо используйте

while ( !( 1 <= height && height <= 8 ) );

pr

while ( 1 > height || height > 8 );
...