Я прочитал около 5-10 различных советов, как очистить stdin, но ни один из них не соответствует моим потребностям. Дело в том, что fflush(stdin)
отлично работал на моем компьютере, но, к сожалению, он не работает повсюду, поэтому мне нужно что-то с той же функциональностью. Каждый другой способ, который я пробовал, очищает stdin, когда он не пуст, но требует ввода пользователя, когда stdin IS пуст, что означает, что он требует ввода в тот момент, когда я не хочу его получать (+ он все равно отбрасывает).Как очистить stdin перед тем, как получить новый вход?
Вопрос: Могу ли я как-то убедиться, что stdin
Пусто, прежде чем я требую ввода пользователем? (А если нет, тогда и только тогда ясно, что так или иначе?) что-то вроде:
if (stdin is NOT empty)
while (getchar() != '\n')
continue;
EDIT: дело в том, что я загружаю символы stdin
один за другим, и в какой-то момент, часть входа из предыдущая итерация может или не может быть отброшена. в любом случае, мне нужно очистить stdin
, прежде чем я попрошу пользователя ввести другой вход для обработки. Очистка самого буфера не такая уж большая проблема, проблема в том, что происходит, когда вход пуст, когда программа достигает точки очистки stdin
, потому что в этот момент программе нужен другой вход, который будет съеден клирингом функция. То, от чего я хочу избавиться. (Когда я мог бы использовать fflush(stdin);
я просто знал, что для следующей линии моей программы stdin
не будет пустовать ни на что, не задавая никаких вопросов ...)
'fflush (stdin)' is UB. –
Нет такой вещи, как * пустой поток ввода-вывода *, это ** поток **. Рассмотрим:. ./myprog dev/random'; будет ли он когда-либо видеть конец своего потока stdin? – joop
Программирование на окнах, должно работать в linux ... – Tom