当前位置:  技术问答>linux和unix

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

    来源: 互联网  发布时间:2016-05-13

    本文导语:  想要直接读取键盘的输入,但是libc中提供的函数getchar,sscanf都需要以回车作为结束符。 请问,用什么函数能够在按下键盘的时候程序立刻读取。类似于windows下的hitkb函数功能。 linux应该有这样的东西吧,比如man,mor...

想要直接读取键盘的输入,但是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

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教SHELL语句如何获取程序的安装路径?
  • 高手请教!linux怎样通过pid获取进程信息,如:进程名、进程状态等?
  • 请教:如何将网卡ip地址由DHCP获取该为指定ip
  • 请教大虾:),获取线程id的问题
  • 请教linux下获取剪切板内容
  • 请教一个定时获取cpu、内存占用率
  • 请教各位,shell脚本获取当前日期是本年的第几周?
  • 请教:如何在程序中获取本地网卡的默认网关?
  • 请教一个跑shell连ftp时获取ftp返回值的问题
  • 请教一个关于shell脚本获取时间的问题
  • 请教:如何在程序中获取本机MAC地址?
  • 请教,请教,这个问题是为什么????
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)
  • 浙ICP备11055608号-3 iis7站长之家
  • 请教两个redhat9问题
  • 请教如何在指定目录下查找包含指定文字的文件
  • 请教局域网中如何通过ip地址得到主机名
  • 请教kdevelop的问题
  • 请教linux 下的adsl拨号问题.
  • 请教,如何用虚拟订机安装liux
  • 【请教】LINUX 下SNMP的MIB开发
  • 请教一个opengl的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3