Jak wyczyścić bufor cin w C ++?
c++
cin
io-buffering
Dana the Sane
źródło
źródło
Wolałbym ograniczenia rozmiaru C ++ od wersji C:
źródło
cin
i użyję pierwszej instrukcji powyżej do opróżnieniacin
bufora, to wyświetla monit o wprowadzenie danych, dopóki nie wejdęEOF
, naciskającctrl+d
?To była jedyna rzecz, która zadziałała podczas czytania z konsoli. W każdym innym przypadku albo czytałby w nieskończoność z powodu braku \ n, albo coś pozostawało w buforze.
EDYCJA: Dowiedziałem się, że poprzednie rozwiązanie pogorszyło sprawę. TEN jednak działa:
źródło
Znalazłem dwa rozwiązania tego problemu.
Pierwszym i najprostszym jest użycie
std::getline()
na przykład:... to odrzuci strumień wejściowy, gdy dotrze do nowej linii. Przeczytaj więcej o tej funkcji tutaj .
Inną opcją, która bezpośrednio odrzuca strumień, jest to ...
Powodzenia!
źródło
źródło
Co powiesz na:
źródło
Wolę:
Jest przykład, w którym cin.ignore po prostu tego nie robi, ale w tej chwili nie mogę o tym myśleć. To było jakiś czas temu, kiedy musiałem go użyć (z Mingw).
Jednak fflush (stdin) jest niezdefiniowanym zachowaniem zgodnie ze standardem. fflush () jest przeznaczona tylko dla strumieni wyjściowych. fflush (stdin) tylko wydaje się działać zgodnie z oczekiwaniami na Windows (z GCC i MS kompilatory przynajmniej) jako rozszerzenie standardu C .
Jeśli więc go użyjesz, Twój kod nie będzie przenośny.
Zobacz Używanie fflush (stdin) .
Zobacz także http://ubuntuforums.org/showpost.php?s=9129c7bd6e5c8fd67eb332126b59b54c&p=452568&postcount=1, aby znaleźć alternatywę.
źródło
Innym możliwym (ręcznym) rozwiązaniem jest
Nie mogę użyć fflush ani cin.flush () z CLion, więc to się przydało.
źródło
Najprostszy sposób:
Po prostu umieszcza wskaźnik cin na końcu strumienia stdin, a cin.clear () czyści wszystkie flagi błędów, takie jak flaga EOF.
źródło
Powinno działać:
W niektórych systemach nie jest dostępny, a następnie możesz użyć:
źródło
flush
metoda służy tylko do wyświetlania i dotyczy już zapisanych znaków.basic_istream<char>' has no member named 'flush'
a następnie użyj funkcji
źródło
cin.get()
wydaje się, że spłukuje go automatycznie, dość dziwnie (chociaż prawdopodobnie nie jest to preferowane, ponieważ jest to mylące i prawdopodobnie temperamentne).źródło
U mnie to zadziałało. Użyłem pętli for z getline ().
źródło