当我们做一个程序比如游戏时需要从键盘读入方向键,并且最好读入后不需要按回车且不要显示。下面我们在WIN和LINUX下分别一一实现;
- 读入方向键;
在win下,方向键由两个字节组成,分别为:’\244’和
‘\72’ up
‘\80’ down
‘\75’ left
‘\77’ right
所以我们可以读两次来确认一个方向键
char a;
a=getchar();
if(a=='\244')
{
a=getchar();
if(a=='\72')
printf("上\n");
if(a=='\80')
printf("下\n");
if(a=='\75')
printf("左\n");
if(a=='\77')
printf("右\n");
}
而在Linux下,方向键由三个字节组成,分别为:’\033’和’[‘和
‘A’ up
‘B’ down
‘C’ left
‘D’ right
相同的我们可以读三次次来确认一个方向键
char a;
a=getchar();
if(a=='\033')
{
a=getchar();
if(a=='[')
{
a=getchar();
if(a=='A')
printf("上\n");
if(a=='B')
printf("下\n");
if(a=='D')
printf("左\n");
if(a=='C')
printf("右\n");
}
}
//当然我们也可以使用字符串数组
char a[4];
scanf("%s",a);
if(!strcpy(a,"\033[A"))
printf("上");
//。
//。
//。
//。
- 读入后不需要按回车且不回现
在win下,我们可以使用conio.h库下的getch()函数读字符,就可以不回显,不用按回车;
但是在Linux下我们没有conio.h库,也没有类似的函数,所以就得使用一些新操作(还有这种操作?)
那就是设置Linux终端里设置非正规模式(没错就是有这种操作!)
struct termios stored_settings;
struct termios new_settings;
tcgetattr (0, &stored_settings);// 得到原来的终端属性
new_settings = stored_settings;
new_settings.c_lflag &= (~ICANON);//设置非正规模式,程序每次要从终端读取一个字符的
new_settings.c_cc[VTIME] = 0;//设置非正规模式下的读延时
new_settings.c_cc[VMIN] = 1;// 设置非正规模式下的最小字符数
tcsetattr (0, TCSANOW, &new_settings);// 设置新的终端属性
//然后就可以读取了
char a;
a=getchar();
tcsetattr (0, TCSANOW, &stored_settings);// 恢复默认设置
//读完记得恢复默认设置,不然。。。。。。