因此,我使用termios库将终端置于原始模式,这使我可以执行此操作:

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);


但是它也挂了。我也想仅使用iostream或标准posix函数来执行此操作。

最佳答案

照常做:

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

关于c++ - 如何使用std::cin清除TTY设置为原始模式的输入缓冲区?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27138192/

10-11 23:02
查看更多