【C语言->TurboC环境】->bioskey函数详细分析

bioskey()函数是TurboC的内置函数,只能再TC中使用,是一个接口函数。

函数声明: int bioskey (int cmd);

函数头文件: bios.h

函数功能:
为方便验证,我写了一个简单的函数,来判断bioskey()函数的返回值。👇

#include <stdio.h>
#include <stdlib.h>
#include <bios.h>

int main() {
	int temp;

	temp = bioskey(1);
	printf("%x\n", temp);

	getch();

	return 0;
}

通过变化bioskey()函数的参数,来试验不同参数时的返回值。

1.cmd = 0:👇

当cmd是0,bioskey()返回下一个在键盘键入的值(它将等待到按下一个键)。它返回一个16位的二进制数,包括两个不同的值。当按下一个普通键时,它的低8位数存放该字符的ASCII码;对于特殊键(如方向键、F1~F12等等),低8位为0,高8位字节存放该键的扫描码。

在这里插入图片描述
由上至下,输入的值依次为,1,a,space,上方向键,shift+a,Crrl+a,a;
可以看到,当输入不同的值甚至不同的组合时,返回的值都是不一样的。以下为一个返回值的表,仅供参考。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.cmd = 1:

当cmd是1,bioskey()查询是否按下一个键,若按下一个键则返回非零值,否则返回0。通俗讲,就是给bioskey()的参数是1时,只有当键盘上的一个键按下时,bioskey(1)的值才会不为0,才执行其他代码。网上的其他资料我觉得都没有说清楚,我觉得bioskey(1)最重要的作用就是循环保持。
在这里插入图片描述
可以看到,我没有输入任何值,则返回值为0,再按任意键,则程序直接退出。
接下来为大家介绍最重要的功能,也是其他资料没有说清楚的地方。
以下为我的测试代码:👇

#include <stdio.h>
#include <stdlib.h>
#include <bios.h>

int main() {
	clrscr();
	
	while (0 == bioskey(1)) {
		printf("press any key to exit\n");
	}
	system("pause");

	printf("you are exit sucessfully\n");

	getch();

	return 0;
}

可以看到,当bioskey(1)返回值为0时,即你不敲任何键,它就会一直循环,重复输出"press any key to exit“,只有当你按下任意键,循环才会结束,输出"you are exit sucessfully"。以下为测试结果:👇
在这里插入图片描述
所以比如编写贪吃蛇的程序时,你可以讲贪吃蛇运动的代码写进这个循环里,只有当你在键盘上操作,按下一个键,贪吃蛇就会改变运动状态。
或者当作 if() 语句的判断语句,比如 if(bioskey(1)), 意为当你不键入任何键时,程序跳过 if 语句继续执行下面的代码,而如果你按任意一个键,程序就会执行 if语句里的代码。
这就是参数为1时,该函数返回值的意义。

3.cmd = 2:

当cmd是2,bioskey()返回Shift、Ctrl、Alt、ScrollLock、NumLock、CapsLock、Insert键的状态。各键状态存放在返回值的低8位字节中。

这里需要说明的是,在TC中,int类型是两个字节,所以一共16位,我们将其分为低八位和高八位,每一位所代表的意义如下:

字节位
0 右边Shift键状态

1 左边Shift键状态

2 Ctrl键状态

3 Alt键状态

4 ScrollLock键状态

5 NumLock键状态

6 CapsLock键状态

7 Insert键状态

字节位为1表示该键被按下,为0表示松开。

所以可以根据返回值来判断这些键的状态。

👆
以上即为bioskey()这一个冷门又古老的函数的分析。

发布了5 篇原创文章 · 获赞 12 · 访问量 178
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览