C++ - 暂停程序,直到按下某个键

C++ - Pause program until a certain key is pressed

本文关键字:暂停 程序 C++      更新时间:2023-10-16

有没有一个函数可以让命令提示符程序像system("pause")一样等待,只有在接受某个键后才继续运行?

如果您正在等待换行符,有一种简单易用的方法可以做到这一点。只需使用getline.

如果您想在不先接收换行符的情况下接收其他字符,那么事情就不那么便携了。在Unix系统中,您需要将终端设置为"原始模式"。正如 George 的评论所提到的,ncurses 是一种简单的方法,此外它还提供了方便的功能,可以将东西绘制到终端中的特定位置、接收任意键等。

在Windows上,您需要使用其控制台界面。当然,这在Windows之外是无法使用的。

正如Neil Butterworth评论的那样,还有一个适用于Windows的curses版本,称为PDCurses。如果你需要编写适用于Unix和Windows的软件,这是一个不错的选择。

如果 getline 和 ncurses 对你不起作用,那么总是有 conio.h 和 getch()。 正如这个答案中所解释的,这有一些问题,为什么我在Linux上找不到

祝你好运。

如果你在Windows上,你可以使用kbhit(),它是Microsoft运行时库的一部分。如果你在Linux上,你可以实现kbhit。

#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
int kbhit(void)
{
  struct termios oldt, newt;
  int ch;
  int oldf;
  tcgetattr(STDIN_FILENO, &oldt);
  newt = oldt;
  newt.c_lflag &= ~(ICANON | ECHO);
  tcsetattr(STDIN_FILENO, TCSANOW, &newt);
  oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
  fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);
  ch = getchar();
  tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
  fcntl(STDIN_FILENO, F_SETFL, oldf);
  if(ch != EOF)
  {
    ungetc(ch, stdin);
    return 1;
  }
  return 0;
}

编译步骤:

 gcc -o kbhit kbhit.c

运行时

 ./kbhit

它会提示您按键,并在您按下某个键(不限于 Enter 或可打印键)时退出。

(通过互联网 - 您可以修改代码并使用特定的 ch 值,例如 作为 Enter 键)