关于bioskey函数的一点疑问

yangling18 2004-08-19 11:23:09
/****************************************************************/
/*bioskey函数 */
/*函数原型: int bioskey(int cmd); */
/*函数功能: */
/* 利用函数bioskey可以实现三种功能,参数cmd为要实现的功能号,*/
/*值只能为0、1、2,具体含义如下: */
/* 0:在系统中有一个按键队列,所有的键盘按键都在这里排成队。该*/
/*功能就是如果按键队列中有按键,那么读取队列首位的按键,并返回按*/
/*键值;否则等待键盘按键出现。( 其中按键值的高字节为扫描码,低字*/
/*节为ascii码) */
/* 1:如果按键队列中没有按键,那么返回零,否则返回非零。 */
/* 2:返回特殊按键shift、ctrl、alt等键的按键状态。 */
/****************************************************************/
/*bioskey例程*/
#include <stdio.h>
#include <bios.h>
#include <ctype.h>

#define right 0x01
#define left 0x02
#define ctrl 0x04
#define alt 0x08

int main(void)
{
int key, modifiers;

/* 1号功能返回零,除非按下了一个键*/
while (bioskey(1) == 0);

/* 0号功能返回等待中按下的键*/
key = bioskey(0);

/* 2号功能用于判断特殊键是否被按下*/
modifiers = bioskey(2);
if (modifiers)
{
printf("[");
if (modifiers & right) printf("right");
if (modifiers & left) printf("left");
if (modifiers & ctrl) printf("ctrl");
if (modifiers & alt) printf("alt");
printf("]");
}
/* print out the character read */
/* 打印出读进来的字符 */
if (isalnum(key & 0xff))
printf("'%c'\n", key);
else
printf("%#02x\n", key);
return 0;
}
这个程序是一张教学光盘自带的,为什么我按right,left,ctrl,alt屏幕没有显示,再有,printf("%#02x\n", key)中#代表什么意思
...全文
161 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangling18 2004-08-26
  • 打赏
  • 举报
回复
大家真热心啊
freedwind 2004-08-20
  • 打赏
  • 举报
回复
刚弄明白,也来说说^_^

那left和right指的是左右两个shift键,right,left,ctrl,alt这些特殊键和那些不是特殊键一起按的时候你才能显性地看出来,(你只按那些字符键或数字键时会发现前面多一个[]是不是,因为那个numlock键也是特殊键---一般都会按下这个键的^_^).

那%#02x的#号是输出那些进制的前缀的,如%#02x后面是x,就在前面输出0x,如是o,就输出0;
那2代表你要输出多少位(包括那前缀),而那0代表的是如果你输出的总位数不够你要求的(这里是2位)就在前缀和按键码之间补0,超出你要求位数的,将全部输出(我不明白他这为什么取2位,不如不取,那位大虾指点一下)
tuxw 2004-08-19
  • 打赏
  • 举报
回复
哪里的教学光盘?
这就是 TC 自带的在线帮助中的代码原版,只是将宏定义的大写变成了小写
在 TC 中输入 bioskey 并将光标定在该单词上,按 CTRL+F1,打开帮助,翻到下面,有个 sample 打开就是了

单独的控制键盘没有意义,主要用在组合键上如 ALT + F

# 的作用如楼上
pacman2000 2004-08-19
  • 打赏
  • 举报
回复
#02x是在16进制前面加上0x的前缀。
sunlu_eric 2004-08-19
  • 打赏
  • 举报
回复
不是只按它们,还必须按别的键才可以,是说同时按,
关于#,我忘了!!!再找!

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧