我无法在Linux中找到conio.h的等效头文件。
getch()
&是否有任何选项? Linux中的getche()
函数?
我想制作一个开关盒基本菜单,用户只需按一个键即可给出他的选项。过程应该向前推进。我不想让用户在按下他的选择后按ENTER键。
答案 0 :(得分:67)
#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上找到了这个片段而且我已经保存了它,最后我在很长一段时间后为你打开它!希望它有所帮助!感谢
答案 1 :(得分:30)
char getch(){
/*#include <unistd.h> //_getch*/
/*#include <termios.h> //_getch*/
char buf=0;
struct termios old={0};
fflush(stdout);
if(tcgetattr(0, &old)<0)
perror("tcsetattr()");
old.c_lflag&=~ICANON;
old.c_lflag&=~ECHO;
old.c_cc[VMIN]=1;
old.c_cc[VTIME]=0;
if(tcsetattr(0, TCSANOW, &old)<0)
perror("tcsetattr ICANON");
if(read(0,&buf,1)<0)
perror("read()");
old.c_lflag|=ICANON;
old.c_lflag|=ECHO;
if(tcsetattr(0, TCSADRAIN, &old)<0)
perror ("tcsetattr ~ICANON");
printf("%c\n",buf);
return buf;
}
复制此功能并使用它,不要忘记包含
remove the last printf if you dont want the char to be displayed
答案 2 :(得分:7)
我建议你使用curses.h或ncurses.h这些实现键盘管理例程,包括getch()。您有几个选项可以更改getch的行为(即等待是否按下按键)。
答案 3 :(得分:4)
ncurses库中有一个getch()函数。 您可以通过安装ncurses-dev软件包来获取它。
答案 4 :(得分:0)
您可以在linux中使用curses.h
库,如其他答案中所述。
您可以通过以下方式在Ubuntu中安装它:
sudo apt-get update
sudo apt-get install ncurses-dev
我从here获取了安装部分。
答案 5 :(得分:0)
如上所述,getch()
位于ncurses
库中。 ncurses必须初始化,请参阅getchar() returns the same value (27) for up and down arrow keys了解
答案 6 :(得分:-1)
getch()
中的getchar()
替代stdio.h
。 getchar()
可在Windows和Linux上使用。
以下内容来自Max Truxa的评论。
getch()
和getchar()
之间存在一些(有些重要的)差异。
1)按下某个键后,getch()
立即返回。 getchar()
允许您无限期输入,直到您输入EOL。
2)getch()
不会在屏幕上打印任何内容。 getchar()
将您输入的所有内容写入屏幕(即使是EOL)。
如果这两个差异对用户不重要,可以使用getchar()
作为替代,否则这可能不是最佳选择。