Linux键盘输入buf,【请教】linux下如何直接获取键盘输入而不需要以回车作为结束符...

想要直接读取键盘的输入,但是libc中提供的函数getchar,sscanf都需要以回车作为结束符。

请问,用什么函数能够在按下键盘的时候程序立刻读取。类似于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

您可能感兴趣的文章:

  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值