大家在初学编程的时侯,有没有作过这样的尝试:用scanf()函数来获得方向键和一些控制键的ASCII的值.
比如:scanf("%c",&ch);运行的时时侯,不论怎么按那些方向键和控制键,都没有什么反应.这是什么原因.
大家可以想一下,%c是用来获取字符的输入,而这些方向键和控制键并不是ASCII的字符输入键.
哦,原来是这样.那么怎样才能捕获这些不是字符输入键呢.
首先,我们知道不能再用只捕获字符信息的方法来捕获这些键.那么,在C语言中有没有提供其它的捕获按键
信息的函数.当然,C语言提供了这样的函数.它就是bioskey().由于函数名的字面意思可知"基本输入输出系统键".
那么,bioskey()是怎么用的呢.它在bios.h中的原型声明:int _Cdecl bioskey(int cmd);
bioskey(1)检测是否有键(不检查单独控制键的按下(Shift/Ctrl/CapsLock/Alt/ScrLock/PrtScr/NumLock/PauseBreak))按下,
没有键按下时返回0,有键按下时返回按键码(任何按键码都不为0),
但此时并不将检测到的按键码从键盘缓冲队列中清除.
bioskey(0)返回键盘缓冲队列中的按键码,并将此按键码从键盘缓冲队列中清除.
bioskey(2)返回按键的状态,返回值保存在低8位中含义如下:
位 为0时意义 为1时意义
7 插入状态 改写状态
6 大写状态 小写状态
5 数字状态,NumLock灯亮 光标状态,NumLock灯熄
4 ScrollLock灯亮 ScrollLock灯熄
3 Alt按下 Alt未按下
2 Ctrl按下 Ctrl未按下
1 左Shift按下 左Shift未按下
0 右Shift按下 右Shift未按下
知道了以上的内容就很容易来捕获方向键的按键情况.如下面程序:
#include<stdio.h>
#include<conio.h>
#include<bios.h>
int main(void)
{
int key;
clrscr();
while(!bioskey(1)) ;
key=bioskey(0);
printf("%x",key);
getch();
}
运行一下可以知道:
向上的方向键(key=0x4800)
向下的方向键(key=0x5000)
向左的方向键(key=0x4b00)
向上的方向键(key=0x4d00)
那么,当我们要用bioskey()来输入字符键呢,该怎么办呢.
由于bioskey(0)返回值中,低字节为ASCII值,高字节为键描述码.
可以参考以下程序:
#include<stdio.h>
#include<conio.h>
#include<bios.h>
int main(void)
{
char ch;
clrscr();
while(!bioskey(1)) ;
ch=(char)bioskey(0);
printf("%c",ch);
getch();
}
希望大家都bioskey()有一个更深地认识.