Как очистить входной буфер с TTY в необработанном режиме, используя std :: cin?

Поэтому я использовал библиотеку termios, чтобы перевести терминал в режим raw, что позволяет мне сделать это:

int getch() {
int ch;
do {
ch = cin.get();
} while(cin.eof());
return ch;
}

Это ожидает готовности одного символа во входном буфере и возвращает его.

Но если я попытаюсь сделать это:

void clear_input_buffer() {
char ch;
while(!cin.fail()) {
cin.get(ch);
}
}

Это идет в бесконечный цикл.

Каков был бы подходящий способ очистить входной буфер? Я пробовал это:

cin.clear();
cin.ignore(INT_MAX);

Но это также зависает. Я также хотел бы сделать это, используя только iostreams или стандартные функции posix.

0

Решение

Просто сделай обычное:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
1

Другие решения


По вопросам рекламы [email protected]