Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;-暂停程序,直到按下某个键_C++ - Fatal编程技术网

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

C++ C++;-暂停程序,直到按下某个键,c++,C++,是否有一种功能可以让命令提示符程序像“系统”(“暂停”)一样等待,并且只有在接受某个键后才能继续运行?如果您正在等待换行符,有一种简单且可移植的方法可以做到这一点。只需使用getline 如果您希望在不首先接收换行符的情况下接收其他字符,那么这些字符的可移植性就会降低。在Unix系统中,您需要将终端设置为“原始模式”。正如George的评论所提到的,ncurses是实现这一点的一种简单方法,而且它还提供了方便的功能,用于将东西绘制到终端中的特定位置、接收任意键等 在Windows上,您需要使用它

是否有一种功能可以让命令提示符程序像“系统”(“暂停”)一样等待,并且只有在接受某个键后才能继续运行?

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

如果您希望在不首先接收换行符的情况下接收其他字符,那么这些字符的可移植性就会降低。在Unix系统中,您需要将终端设置为“原始模式”。正如George的评论所提到的,ncurses是实现这一点的一种简单方法,而且它还提供了方便的功能,用于将东西绘制到终端中的特定位置、接收任意键等

在Windows上,您需要使用它的。当然,这在Windows之外是不可用的


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

如果您正在等待换行符,有一种简单且可移植的方法。只需使用
getline

如果您希望在不首先接收换行符的情况下接收其他字符,那么这些字符的可移植性就会降低。在Unix系统中,您需要将终端设置为“原始模式”。正如George的评论所提到的,ncurses是实现这一点的一种简单方法,而且它还提供了方便的功能,用于将东西绘制到终端中的特定位置、接收任意键等

在Windows上,您需要使用它的。当然,这在Windows之外是不可用的


正如Neil Butterworth评论的那样,还有一种适用于Windows的诅咒版本,称为PDCurses。如果您需要编写既适用于Unix又适用于Windows的软件,这是一个很好的选择。

如果getline和ncurses不适用于您,那么总是有conio.h和getch()。正如这个答案中所解释的,这方面存在一些问题


祝你好运。

如果getline和ncurses不适合你,那么总是会有conio.h和getch()。正如这个答案中所解释的,这方面存在一些问题


祝您好运。

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

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

如果您在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;
}
当与

 ./kbhit
它会提示您按键,并在您按键时退出(不限于输入键或可打印键)


(通过internet访问-您可以修改代码并使用特定的ch值,如Enter键的\n)

如果您使用的是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;
}
当与

 ./kbhit
它会提示您按键,并在您按键时退出(不限于输入键或可打印键)


(通过Internet,你可以修改代码,使用特定的CH值,比如输入键\\n)

你可能想看看,你是说一步一步地通过代码一行吗?不是在C++标准库中。你是在说一个“正常”的命令行程序还是一个特定于平台的……等待时程序应该做什么?绝对没有什么(在这种情况下,您可以只使用阻塞IO)?澄清一下,我希望它像系统一样工作(“暂停”),除了它只接受某个键。我会编辑这个问题。你可能想看看,你是不是一步一步地通过代码一行?不是在C++标准库中。你是在说一个“正常”的命令行程序还是一个特定于平台的程序……等待时程序应该做什么?绝对没有什么(在这种情况下,您可以只使用阻塞IO)?澄清一下,我希望它像系统一样工作(“暂停”),除了它只接受某个键。我来编辑这个问题。看来你误解了我的问题。我想知道的是,是否有一个函数类似于getch(),但只适用于某个键。看来你误解了我的问题。我想知道的是,是否有一个函数类似于getch(),但只适用于某个键。