Как очистить буфер cin в C ++?
c++
cin
io-buffering
Дана Разумная
источник
источник
Я бы предпочел ограничения размера C ++ по версиям C:
источник
cin
и использую первый оператор выше для очисткиcin
буфера, он продолжает запрашивать ввод, пока я не войдуEOF
нажатиемctrl+d
?Это единственное, что у меня сработало при чтении с консоли. В любом другом случае он либо будет читать бесконечно из-за отсутствия \ n, либо что-то останется в буфере.
РЕДАКТИРОВАТЬ: Я обнаружил, что предыдущее решение ухудшило ситуацию. ЭТО, однако, работает:
источник
Я нашел два решения этой проблемы.
Первый и самый простой - использовать,
std::getline()
например:... который отбрасывает входной поток, когда он переходит на новую строку. Подробнее об этой функции здесь .
Другой вариант, который напрямую отбрасывает поток, - это ...
Удачи!
источник
источник
Как насчет:
источник
Я предпочитаю:
Есть пример, когда cin.ignore просто не сокращает его, но я не могу об этом сейчас думать. Это было некоторое время назад, когда мне нужно было использовать его (с Mingw).
Однако fflush (stdin) - это неопределенное поведение согласно стандарту. fflush () предназначен только для выходных потоков. fflush (STDIN) только , кажется, работает , как ожидалось в ОС Windows (с GCC и MS компиляторы по крайней мере) в качестве расширения стандарта C .
Итак, если вы его используете, ваш код не будет переносимым.
См. Использование fflush (stdin) .
Также см. Http://ubuntuforums.org/showpost.php?s=9129c7bd6e5c8fd67eb332126b59b54c&p=452568&postcount=1 для альтернативы.
источник
Другое возможное (ручное) решение:
Я не могу использовать fflush или cin.flush () с CLion, так что это пригодилось.
источник
Самый простой способ:
Он просто помещает указатель cin в конец потока stdin, а cin.clear () очищает все флаги ошибок, такие как флаг EOF.
источник
Следующее должно работать:
В некоторых системах это недоступно, и тогда вы можете использовать:
источник
flush
метод предназначен только для вывода и имеет дело с уже написанными символами.basic_istream<char>' has no member named 'flush'
а затем используйте функцию
источник
cin.get()
кажется, как ни странно, автоматически смывает его (хотя, вероятно, не рекомендуется, поскольку это сбивает с толку и, вероятно, темпераментно).источник
У меня это сработало. Я использовал цикл for с getline ().
источник