这个函数的功能是得到键盘按键对应的ASCII码值。
采用两层getch()的用意是,某些扩展码对应的按键,低字节为0,高字节才是该键的扩展码。
如果把程序改为
void get_key(char *ch,char *ext)
{
*ch=getch(); //得到键盘按键的ASCII码值
if(!*ch) //如果是特殊的按键则对应的低字节值为0
*ext=getch(); //继续采集高字节码值
else //标准按键
*ext=0;
}
main()
{
char ch, ext;
get_key(&ch, &ext);
printf("/n--------0X%x ---------/n", ch); //输出ASCII码值,16进制
printf("/n--------0X%x---------/n", ext); //输出ASCII码值,16进制
getch();
}
看的会更清楚一些。
运行结果:
a ch - 0X61 ext - 0X0
-> ch - 0X0 ext - 0X4d
下面是常用扩展码以及其按键:
按键 扩展码
Shift+Tab 0x0f
home 0x47
向上键 0x48
PgUp 0x49
<- 0x4b
-> 0x4d
End 0x4f
向下键 0x50
PgDn 0x51
Insert 0x52
Delete 0x53
F1 - F10 0X3b - 0X44
Shift+F1 - F10 0X54 - 0X5d
Ctrl +F1 - F10 0x5e - 0x67
Alt +F1 - F10 0x68 - 0x71
以上是我在网上找到的。于是在自己机上跑了一下发现情况好象不一样,准确的说是更复杂一点。
以下是我的输入和输出
1: run
2: 输入k 输出 --ox66---
--ox0---
3: 向上键 程序退出
4: run --ox48---
--ox0---
5: -> 退出
6: run --ox4d---
--ox0----
7: j 退出
8: 〈- --ox0----
--ox46---
9: 向下键 退出
10: run --ox50---
--ox0----
11: k 退出
12: run
13: k --ox66---
--ox0---
上面的结果是我运行了好几次一致得出的结果。我从其中发现两个问题:
1:当退出前输入字母时,下次运行时不会有响应结果输出,且不受其影响。但是向上,下键却有。
2:为什么程序中ch的值,在输入向上,向下等键的不同时期,其值是不同的 。这两个时期就是运行中输入和
退出程序前输入是不同的 。
以上问题只是提出来而已。因为没有getch()的源代码,所以我也不知道怎么解释。