it-swarm.cn

Linux中的getch()和getche()相当于什么?

我无法在Linux中找到conio.h的等效头文件。

Linux中有getch()getche()函数的选项吗?

我想制作一个开关盒基本菜单,用户只需按一个键就可以选择,并且应该向前移动过程。按下他的选择后,我不想让用户按ENTER键。

52
Jeegar Patel
#include <termios.h>
#include <stdio.h>

static struct termios old, new;

/* Initialize new terminal i/o settings */
void initTermios(int echo) 
{
  tcgetattr(0, &old); /* grab old terminal i/o settings */
  new = old; /* make new settings same as old settings */
  new.c_lflag &= ~ICANON; /* disable buffered i/o */
  if (echo) {
      new.c_lflag |= ECHO; /* set echo mode */
  } else {
      new.c_lflag &= ~ECHO; /* set no echo mode */
  }
  tcsetattr(0, TCSANOW, &new); /* use these new terminal i/o settings now */
}

/* Restore old terminal i/o settings */
void resetTermios(void) 
{
  tcsetattr(0, TCSANOW, &old);
}

/* Read 1 character - echo defines echo mode */
char getch_(int echo) 
{
  char ch;
  initTermios(echo);
  ch = getchar();
  resetTermios();
  return ch;
}

/* Read 1 character without echo */
char getch(void) 
{
  return getch_(0);
}

/* Read 1 character with echo */
char getche(void) 
{
  return getch_(1);
}

/* Let's test it out */
int main(void) {
  char c;
  printf("(getche example) please type a letter: ");
  c = getche();
  printf("\nYou typed: %c\n", c);
  printf("(getch example) please type a letter...");
  c = getch();
  printf("\nYou typed: %c\n", c);
  return 0;
} 

只需复制这些功能并使用它。我很久以前在google上找到了这个片段而且我已经保存了它,最后我在很长一段时间后为你打开它!希望它有所帮助!谢谢

67
niko

我建议你使用curses.h或ncurses.h这些实现键盘管理例程,包括getch()。您有几个选项可以更改getch的行为(即等待是否按键)。

7
Fafaman

Ncurses库中有一个getch()函数。您可以通过安装ncurses-dev软件包来获取它。

4
Jan S

如上所述getch()位于ncurses库中。 ncurses必须是 初始化 ,参见ie getchar()为向上和向下箭头键返回相同的值(27) 为此

0
ralf htp

您可以在linux中使用curses.h库,如其他答案中所述。

您可以通过以下方式在Ubuntu中安装它:

Sudo apt-get update

Sudo apt-get install ncurses-dev

我从 这里拿了安装部件

0
Ashish Ahuja