Когда я пытаюсь запустить без отладки код, все идет гладко, но как только я нажимаю Y, чтобы продолжить ввод чисел, он завершается (должен сказать, что мне нужна помощь)

int main() {
    int a;
    char c;

    do {
        puts("dwse mou enan arithmo: ");
        scanf_s("%d", &a);

        if (a > 0) {
            if (a % 2 == 0)
                printf("the number %d is even \n", a);
            else
                printf("the number %d is odd \n", a);
        } else {
            printf("the program won't run with negative numbers \n");
        }

        printf("if you want to proceed press y or Y :");
        c = getchar();
        getchar();
    } while (c == 'y' || c == 'Y');

    return 0;
}
c
1
istyl 13 Ноя 2018 в 23:59

1 ответ

Лучший ответ

Символ, прочитанный getchar(), является незавершенным символом новой строки, который был введен после числа, но не был использован scanf_s.

Вы должны использовать эту ожидающую новую строку перед чтением следующего символа для теста продолжения, что легко сделать в scanf с пробелом перед спецификацией преобразования %c:

#include <stdio.h>

int main() {
    int a;
    char c;

    for (;;) {
        printf("dwse mou enan arithmo: ");
        if (scanf_s("%d", &a) != 1)
            break;

        if (a >= 0) {
            if (a % 2 == 0)
                printf("the number %d is even\n", a);
            else
                printf("the number %d is odd\n", a);
        } else {
            printf("the program does not accept negative numbers\n");
        }

        printf("if you want to proceed press y or Y: ");
        if (scanf_s(" %c", &c) != 1 || (c != 'y' && c != 'Y'))
            break;
    }
    return 0;
}
1
chqrlie 13 Ноя 2018 в 21:13