При ctr + D не получается очистить поток ввода в scanf()

Рейтинг: 0Ответов: 1Опубликовано: 05.03.2023

Вот функция очистки:

void clear()
{
int c;
while ((c = getchar()) != '\n' && c != EOF) {}
}

Вот пример использования: (Условно мне нужно получить одно число от 2 до 22)

printf("Введите число от 2 до 22\n>");
while((scanf("%d", &command)) != 1 || command < 23 || 1 < command)
{
    printf("Цифра не распознана. Введите другую цифру\n>");
    clear();
}

Если ввести либо букву, либо неподходящую цифру, то все сработает нормально... Но после ctr + D начинается бесконечный вывод, что цифра не распознан

Ответы

▲ 0Принят

Вообще, в комментариях ответили на то, как исправить, но я нашёл немного другое решение

printf("Введите число от 2 до 22\n>");
while((scanf("%d", &command)) != 1 || command > 22 || 2 > command)
{
    if(feof(stdin))    break;
    printf("Цифра не распознана. Введите другую цифру\n>");
    clear();
}