При ctr + D не получается очистить поток ввода в scanf()
Вот функция очистки:
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 начинается бесконечный вывод, что цифра не распознан
Источник: Stack Overflow на русском