c++ - 如何使用 std::cin 清除 TTY 设置为原始模式的输入缓冲区?

标签 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 函数来执行此操作。

最佳答案

照常做:

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

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

相关文章:

c++ - 为什么许多标准实现允许将值直接分配给 ostream_iterator?

c++ - 简单的方法来检查istream中是否有待处理的数据

c++ - 使用 CMake 链接到 cocoa 库(C++ 与 Objective-C 混合)

c++ - 在纯 C++ 中实现 Linux 内核的 __is_constexpr (ICE_P) 宏

.net - 为什么我无法匹配 POSIX 字符类

c - 如果在单独的线程中关闭(2) 文件描述符,select(2) 会做什么?

c - 在 C 中处理 stdin 上的输入

c++ - "endl"和 "\n"之间的区别

C++ 计算负数和大于 X 的数

c++ - 嵌套循环的时间复杂度 : where does cn(n+1)/2 come from?