Бесконечный цикл, c логическим мышлением - PullRequest
0 голосов
/ 10 мая 2018

У меня проблема с тем, что я вхожу с неизвестным в первый раз в программу. это покажет мне закрытие программы задачи бесконечного цикла. Программа не будет читать оператор else.

    char cont;

    printf("Do u want continue\n");
    scanf("%c", &cont);
    getchar();
    do
    {
        if (cont == 'y' || cont  == 'Y')
        {
            selection();
        }
        else if (cont  != 'n' || cont  != 'N')
        {
            printf("Program Closing \n");
        }
        else
        {
            printf("Invalid Please Re-enter");
            getchar();
            scanf("%c", &cont);
        }
    } while (cont  != 'n'&& cont  != 'N');

1 Ответ

0 голосов
/ 10 мая 2018

давайте разберем ваш код построчно, начиная с

scanf("%c", &cont);

Эта строка получит значение char из stdin и поместит его в cont, который является char, так что все в порядке

getchar();

Все, что я должен сказать для этого, почему? ничего полезного не делает, удалите.

Войдя в цикл, мы получили следующее утверждение

if (cont == 'y' || cont  == 'Y')

эта строка правильная, она проверяет, равен ли символ y или Y

else if (cont  != 'n' || cont  != 'N')

эта строка является главной проблемой, ваш оператор проверяет, является ли продолжение значением НЕ, равным n или N, то есть, как упоминалось выше, если пользователь введет значение a, эта строка вернет true, а затем завершите программу. Чтобы правильно проверить, хочет ли пользователь существовать, вы можете использовать тот же оператор if, используемый для y

if (cont == 'n' || cont  == 'N')

если вы замените оригинальное выражение if на это, ваша программа должна работать как положено. Просто помните, что в будущем != означает, что оно не равно, т.е. если значение равно чему-либо, кроме n или N, верните true. Оператор == проверяет равенство, как вы видели выше, поэтому строка cont == 'n' означает возвращение true, если cont такое же значение, как 'n'

printf("Invalid Please Re-enter");
getchar();
scanf("%c", &cont);

также в качестве дополнительной заметки, пожалуйста, объясните, почему вы продолжаете добавлять бесполезные getchar(), эти строки буквально ничего не делают, и вы должны удалить их.

...