当前位置: 技术问答>linux和unix
【请教】linux下如何直接获取键盘输入而不需要以回车作为结束符
来源: 互联网 发布时间:2016-05-13
本文导语: 想要直接读取键盘的输入,但是libc中提供的函数getchar,sscanf都需要以回车作为结束符。 请问,用什么函数能够在按下键盘的时候程序立刻读取。类似于windows下的hitkb函数功能。 linux应该有这样的东西吧,比如man,mor...
想要直接读取键盘的输入,但是libc中提供的函数getchar,sscanf都需要以回车作为结束符。
请问,用什么函数能够在按下键盘的时候程序立刻读取。类似于windows下的hitkb函数功能。
linux应该有这样的东西吧,比如man,more命令,在键入q的时候程序就回响应退出,而不需要回车。
请问,用什么函数能够在按下键盘的时候程序立刻读取。类似于windows下的hitkb函数功能。
linux应该有这样的东西吧,比如man,more命令,在键入q的时候程序就回响应退出,而不需要回车。
|
有两种方式,一种是用curses库,
#include
int main()
{
unsigned char c,b,a,buf[32];
initscr();
while(1)
{
a=b;
b=c;
c=getch();
//clear();
printf("n%xn",c);
memset(buf,0,sizeof(buf));
if(a==27&&b==91)
{
switch(c)
{
case 65:sprintf(buf,"upn");break;
case 66:sprintf(buf,"downn");break;
case 67:sprintf(buf,"rightn");break;
case 68:sprintf(buf,"leftn");break;
}
move(0,0);
addstr(buf);
}
memset(buf,0,sizeof(buf));
refresh();
}
endwin();
}
gcc cursestest.c -o cursestest -l curses
一种是把终端设置成非加工摸设。
#include
#include
#include
#include
#include
#include
#include
#include
int tty_mode(int how)
{
static struct termios original_mode;
if(how==0)
tcgetattr(0,&original_mode);
else return tcsetattr(0,TCSANOW,&original_mode);
}
void set_crmode()
{
struct termios ttystate;
tcgetattr(0,&ttystate);
ttystate.c_lflag &= ~ICANON;
ttystate.c_lflag &=~ECHO;
ttystate.c_cc[VMIN]=1;
tcsetattr(0,TCSANOW,&ttystate);
}
int main()
{
char passwd[256];
char name[32];
int flag1=1,flag2=0,len,i,j;
memset(passwd,0,sizeof(passwd));
while(flag1)
{
memset(name,0,sizeof(name));
printf("input your name:");
fflush(stdout);
scanf("%32s",name);
len=strlen(name);
if(len8)
{
system("clear");
printf("用户名字必须在4--8个字符之间n");
continue;
}
for(j=0;j
#include
int main()
{
unsigned char c,b,a,buf[32];
initscr();
while(1)
{
a=b;
b=c;
c=getch();
//clear();
printf("n%xn",c);
memset(buf,0,sizeof(buf));
if(a==27&&b==91)
{
switch(c)
{
case 65:sprintf(buf,"upn");break;
case 66:sprintf(buf,"downn");break;
case 67:sprintf(buf,"rightn");break;
case 68:sprintf(buf,"leftn");break;
}
move(0,0);
addstr(buf);
}
memset(buf,0,sizeof(buf));
refresh();
}
endwin();
}
gcc cursestest.c -o cursestest -l curses
一种是把终端设置成非加工摸设。
#include
#include
#include
#include
#include
#include
#include
#include
int tty_mode(int how)
{
static struct termios original_mode;
if(how==0)
tcgetattr(0,&original_mode);
else return tcsetattr(0,TCSANOW,&original_mode);
}
void set_crmode()
{
struct termios ttystate;
tcgetattr(0,&ttystate);
ttystate.c_lflag &= ~ICANON;
ttystate.c_lflag &=~ECHO;
ttystate.c_cc[VMIN]=1;
tcsetattr(0,TCSANOW,&ttystate);
}
int main()
{
char passwd[256];
char name[32];
int flag1=1,flag2=0,len,i,j;
memset(passwd,0,sizeof(passwd));
while(flag1)
{
memset(name,0,sizeof(name));
printf("input your name:");
fflush(stdout);
scanf("%32s",name);
len=strlen(name);
if(len8)
{
system("clear");
printf("用户名字必须在4--8个字符之间n");
continue;
}
for(j=0;j