c++ - 等到用户在 C++ 中按下 Enter 键?

标签 c++ windows linux cin enter

waitForEnter() {
    char enter;

    do {
        cin.get(enter);
    } while ( enter != '\n' );
}

它有效,但并不总是有效。在调用该函数之前按下 Enter 键将不起作用。

最佳答案

您可以使用getline让程序等待任何换行符终止的输入:

#include <string>
#include <iostream>
#include <limits>

void wait_once()
{
  std::string s;
  std::getline(std::cin, s);
}

一般来说,您不能简单地“清除”整个输入缓冲区并确保此调用始终阻塞。如果您知道想要丢弃以前的输入,则可以添加 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');上面getline吞噬任何剩余的字符。但是,如果一开始没有额外的输入,这将导致额外的暂停。

如果您想完全控制控制台和键盘,您可能需要查看特定于平台的解决方案,例如像ncurses这样的终端库。 .

一个select调用 Posix 系统,它可以告诉您从文件描述符读取是否会阻塞,因此您可以按如下方式编写该函数:

#include <sys/select.h>

void wait_clearall()
{
  fd_set p;
  FD_ZERO(&p);
  FD_SET(0, &p);

  timeval t;
  t.tv_sec = t.tv_usec = 0;

  int sr;

  while ((sr = select(1, &p, NULL, NULL, &t)) > 0)
  {
    char buf[1000];
    read(0, buf, 1000);
  }
}

关于c++ - 等到用户在 C++ 中按下 Enter 键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8177344/

相关文章:

windows - 将操作系统代码映射到同一逻辑空间的原因?

c++ - 获取 Qt 应用程序的 .so 依赖项的完整列表?

Linux/Unix 从远程列表中删除文件

c++ - 创建用于在函数内写入的文件的最简单方法?

c++ - 一个处理 char* 和 wchar_t* 的函数

windows - 在 Windows 终端中的 git 帐户之间切换的简单方法?

windows - Windows 中的 PDF 到 TIFF 免费库?

c++ - OpenCV - Ptr 语法和类定义/声明 - 混淆?

c++ - 访问未分配的内存 C++

linux - 尝试使用 owncloud 但它说一些 php 模块未安装