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

时间:2017-01-25 18:20:54

标签: c++

是否有一个函数使命令提示程序等待system("pause"),并且仅在接受某个键后才继续运行?

4 个答案:

答案 0 :(得分:2)

如果您正在等待换行符,那么这是一种简单易用的方法。只需使用getline

如果您希望先接收其他字符而不接收换行符,那么便于携带。在Unix系统中,您需要将终端设置为"原始模式"。正如乔治的评论所提到的,ncurses是一种简单的方法,它提供了便利的功能,可以将东西绘制到终端中的特定位置,接收任意键等。

在Windows上,您需要使用其console interface。当然,这不能在Windows之外使用。

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

答案 1 :(得分:0)

如果getline和ncurses不适合你,总会有conio.h和getch()。如本答案Why can't I find <conio.h> on Linux?

中所述,这有一些问题 祝你好运。

答案 2 :(得分:0)

在Windows控制台界面上, getche()函数会在进一步执行之前等待击键。

答案 3 :(得分:0)

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

editor.apply()

编译步骤:

#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

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

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