Jak przepłukać bufor cin?

Jak przepłukać bufor cin?

Wolałbym ograniczenia rozmiaru C++ od wersji C:

// Ignore to the end of file
cin.ignore(std::numeric_limits<std::streamsize>::max())

// Ignore to the end of line
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n')

Ewentualnie:

std::cin.ignore(INT_MAX);

Spowoduje to odczytanie i zignorowanie wszystkiego do EOF . (możesz także podać drugi argument, który jest znakiem do odczytania (np.:'\n' aby zignorować pojedynczą linię).

Także:Prawdopodobnie chcesz zrobić:std::cin.clear(); przed tym również, aby zresetować stan strumienia.


cin.clear();
fflush(stdin);

To była jedyna rzecz, która zadziałała u mnie podczas czytania z konsoli. W każdym innym przypadku albo czytałby w nieskończoność z powodu braku \n, albo coś pozostawałoby w buforze.

EDYCJA:Dowiedziałem się, że poprzednie rozwiązanie pogorszyło sytuację. TEN jednak działa:

cin.getline(temp, STRLEN);
if (cin.fail()) {
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
}