C программа do-while l oop завершается после одного выполнения - PullRequest
0 голосов
/ 06 мая 2020

У меня есть программа, которая предназначена для продолжения цикла до тех пор, пока введенный символ равен 'y', но мой код завершается после одного выполнения do-while l oop.

int main()
{
    char cont;

    do {
        printf("Would you like to continue (y/n)?: ");
        scanf_s("%c", &cont, sizeof(cont));
    } while (cont == 'y');
}

Это займет одно нажатие клавиши и либо выйдет, либо продолжит, как и предполагалось, но затем немедленно выйдет, не дожидаясь дополнительных нажатий клавиш.

1 Ответ

1 голос
/ 06 мая 2020

Кажется, что символ новой строки после «y» читается во втором l oop, а l oop завершается, потому что символ новой строки не y.

Вы должны добавить пробел, чтобы он пропускал такие символы пробела:

scanf_s(" %c", &cont, (unsigned)sizeof(cont));

Также обратите внимание, что параметр размера для scanf_s - это тип unsigned, а не size_t.

scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l | Документы Microsoft

Связанные: c - Что означает пробел в scanf? - Переполнение стека

...