Поэтому я использовал библиотеку 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.
Просто сделай обычное:
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');