如何使用std :: cin将TTY设置为原始模式来清除输入缓冲区?

时间:2014-11-25 22:44:11

标签: c++ posix iostream tty termios

所以我使用了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函数来执行此操作。

1 个答案:

答案 0 :(得分:1)

按常规做法:

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