在TurboC ++中,我可以使用getch()
中的conio.h
函数。但在Linux中,gcc不提供conio.h
。如何获得getch()
的功能?
答案 0 :(得分:27)
试试这个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
类似的某些功能。
答案 1 :(得分:7)
答案 2 :(得分:6)
如果回显到屏幕不是问题,您可以尝试使用getchar()
中的stdio.h
。
答案 3 :(得分:1)
getch()
似乎包含在curses library中。
答案 4 :(得分:0)
在Unix中,getch()
是ncurses库的一部分。但我为this question写了一个解决方法,让你可以使用类似getch的功能,而不需要其他的诅咒行李。
答案 5 :(得分:0)
根据这些解决方案code,您必须手动使用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);
}
只需将它放在主要的代码方法
之前答案 6 :(得分:0)
conio.h仅在Dos中,
for linux,使用
sudo apt-get install libncurses-dev
&安培;那么
-lncurses
//在IDE中,您必须链接它: 例如:codeblocks,Setting - &gt;编译器 - &gt;链接器设置,并添加&#39; ncurses&#39;
答案 7 :(得分:0)
getch()
位于libcurses
。使用curses有点复杂,因为它与底层终端有很深的链接,必须进行初始化。初始化为libcurses的curses getch()
的工作示例位于getchar() returns the same value (27) for up and down arrow keys
答案 8 :(得分:0)
您可以使用libcaca中的"AccountTester a = new Account();"
等效内容:
getch()
答案 9 :(得分:0)
如果出于任何原因您不能使用诅咒,请尝试以下操作:
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <ctype.h>
# include <termios.h>
/* get a single char from stdin */
int getch(void)
{
struct termios oldattr, newattr;
int ch;
tcgetattr(0, &oldattr);
newattr=oldattr;
newattr.c_lflag &= ~( ICANON | ECHO );
tcsetattr( 0, TCSANOW, &newattr);
ch=getchar();
tcsetattr(0, TCSANOW, &oldattr);
return(ch);
}
答案 10 :(得分:0)
你也可以像这样在linux中使用system命令来控制终端
char getch() {
char c;
system("stty raw -echo");
c = getchar();
system("stty -raw echo");
return c;
}
此功能不需要用户按回车键,并且无需回显即可从用户那里获取输入它需要您将 stdlib.h 库添加到您的代码中
注意:此功能仅适用于基于 UNIX 的操作系统
任何改进或指出代码中的任何问题将不胜感激
问候