如何在Linux中实现C的getch()函数?

在TurboC ++中,我可以使用conio.hgetch()函数。 但在Linux中,gcc不提供conio.h 。 我怎样才能得到getch()的function?

试试这个conio.h文件:

 #include <termios.h> #include <unistd.h> #include <stdio.h> /* reads from keypress, doesn't echo */ int getch(void) { struct termios oldattr, newattr; int ch; tcgetattr( STDIN_FILENO, &oldattr ); newattr = oldattr; newattr.c_lflag &= ~( ICANON | ECHO ); tcsetattr( STDIN_FILENO, TCSANOW, &newattr ); ch = getchar(); tcsetattr( STDIN_FILENO, TCSANOW, &oldattr ); return ch; } /* reads from keypress, echoes */ int getche(void) { struct termios oldattr, newattr; int ch; tcgetattr( STDIN_FILENO, &oldattr ); newattr = oldattr; newattr.c_lflag &= ~( ICANON ); tcsetattr( STDIN_FILENO, TCSANOW, &newattr ); ch = getchar(); tcsetattr( STDIN_FILENO, TCSANOW, &oldattr ); return ch; } 

你也可以使用gcc中的ncurses库来实现类似于conio.h一些function。

如果回显到屏幕不是问题,可以尝试使用stdio.h getchar()

getch()似乎被包含在curses库中 。

在Unix中, getch()是ncurses库的一部分。 但是我为这个问题写了一个解决方法,可以让你使用类似getch的function,而不需要其他的诅咒。

根据这些解决scheme代码,您必须手动使用getch()和getche()函数的开源代码,如代码所示。

 #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 */ new.c_lflag &= echo ? ECHO : ~ECHO; /* set 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); } 

只要把它放在你的主要代码的方法之前

conio.h只在DOS下,

为linux,使用

 sudo apt-get install libncurses-dev 

& 然后

 -lncurses 

//在IDE中,您必须链接它:例如:codeblocks,设置 – >编译器 – >链接器设置,并添加'ncurses'

getch()libcurses 。 curses的使用有点复杂,因为它与底层terminal有深层次的联系,需要初始化。 一个工作示例为curses getch()与libcurses的初始化是在getchar()返回相同的值(27)的上下箭头键