社区
C语言
帖子详情
关于bioskey()函数据的一个问题
xiaoweiwsh
2002-07-31 10:44:06
键盘响应函数如下
int specialkey()
{
int key;
while(bioskey(1)==0);
key=bioskey(0);
key=key&0xff?key&0xff:key>>8;
return(key);
}
为什么先要用while循环?该函数是如何解决键盘的组何键的情况的?
...全文
145
9
打赏
收藏
关于bioskey()函数据的一个问题
键盘响应函数如下 int specialkey() { int key; while(bioskey(1)==0); key=bioskey(0); key=key&0xff?key&0xff:key>>8; return(key); } 为什么先要用while循环?该函数是如何解决键盘的组何键的情况的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xiaoweiwsh
2002-07-31
打赏
举报
回复
书上说bioskey()返回一个16位二进制数,当按下一个普通键时它的低8位数存放该字的ASCⅡ码(些时高位是否为0?),对于特殊键(包括箭头,功能键)低8位为0,高8位存放该键的扫描码(扫描码是什么东西?为什么用上面函数specialkey()时,当按下ALT+X时返回45?)
另外,程序中while语句循环的作用是不是等待按键(一直循环直到有按键bioskey()返回0跳出循环?),如果是接下来的bioskey()返回的是那个按键的值?
liushmh
2002-07-31
打赏
举报
回复
为什么先要用while循环?
因为 要确认你是否按键,
key=bioskey(0);该语句为获得键值
key=key&0xff?key&0xff:key>>8;该语句表示如果 key的低8位不全为零
则返回低8位,否则返回高8位。
0xff
2002-07-31
打赏
举报
回复
用while是因为bioskey(1)是检测是否按键~不像getch()会等待按键
解决键盘的组何键的情况要用bioskey(2),详见TC的帮助~
xiaoweiwsh
2002-07-31
打赏
举报
回复
谢谢啦
dcyu
2002-07-31
打赏
举报
回复
ALT+ ?(表示字符或数字)的低8位是零,高8位是扫描码,ALT_X的扫描码是0x2d(45)。按照程序key=key&0xff?key&0xff:key>>8,可知
ALT+X的全码应当是0x2d00,与0xff取与运算,为零,返回key>>8,key右移8位就是0x2d.再赋给key,就是45了。
xiaoweiwsh
2002-07-31
打赏
举报
回复
还有一点小问题,当键盘输入ALT+X时上面的程序是如何得出45的?
dcyu
2002-07-31
打赏
举报
回复
bioskey函数用法如下:
int bioskey(int cmd)本函数用来执行各种键盘操作,由cmd确定操作。
cmd可为以下值:
0 返回敲键盘上的下一个键。若低8位为非0,即为ASCII字符;若低8位为0,
则返回扩充了的键盘代码。
1 测试键盘是否可用于读。返回0表示没有键可用;否则返回下一次敲键之值。
敲键本身一直保持由下次调用具的cmd值为0的bioskey所返回的值。
2 返回当前的键盘状态,由返回整数的每一个位表示,见下表:
┌──┬───────────┬───────────┐
│ 位 │为0时意义 │为1时意义 │
├──┼───────────┼───────────┤
│ 7 │插入状态 │改写状态 │
│ 6 │大写状态 │小写状态 │
│ 5 │数字状态,NumLock灯亮 │光标状态,NumLock灯熄 │
│ 4 │ScrollLock灯亮 │ScrollLock灯熄 │
│ 3 │Alt按下 │Alt未按下 │
│ 2 │Ctrl按下 │Ctrl未按下 │
│ 1 │左Shift按下 │左Shift未按下 │
│ 0 │右Shift按下 │右Shift未按下 │
└──┴───────────┴───────────┘
ckc
2002-07-31
打赏
举报
回复
其实这while完全多余
直接用BIOSKEY(0)就可以了
0和1的不同仅在于0是只有按下了键才会返回
1是当前键盘缓冲区没有键就返回0,如果有键就返回此键的扫描码和ASCII码,注意1并不从缓冲区中清除此键,所以你下次调用0或者1还可以读到这个键值
这两句放在一起这样用没什么意思,直接用第二句就可以了
返回值高位一直都放扫描码,扫描码是键盘的物理编码,每个键都有扫描码
象F1这样的键没有ASCII码,就只有扫描码
hansonhx
2002-07-31
打赏
举报
回复
@_@
C语言程序设计-谭浩强第五版习题【答案解析】2022.5.10
目录第1章 C语言概述第2章 数据类型及其运算第3章 顺序结构程序设计第4章 选择结构程序设计第5章 循环结构程序设计第7章
函数
与指针第8章 结构体与共用体第9章 文件第10章 图形与动画 习题解析与答案 第1章 C语言概述 一. 简答题 1.概述C语言的主要特点。 【解答】 (1)语言简洁、紧凑,使用方便、灵活。 (2)数据类型丰富,表达能力强。 (3)运算符多样。C语言中的运算符包含的范围非常广泛。 (4)具有结构化的控制语句。如if…else语句、while语句、do while语句、switc
c语言开发虚拟仪器,基于C语言的虚拟仪器图形化面板设计方法与实现_熊建云
科技创新与应用2013年第25期信息技术基于C语言的虚拟仪器图形化面板设计方法与实现熊建云(四川信息职业技术学院,四川广元628017)摘要:用菜单方式表达虚拟仪器功能与实现对仪器功能的操作,具有简单直观的优点,用图形化技术的方法把虚拟仪器的功能与内函设计成
一个
“图形面板”显示在计算机的屏幕上,能使虚拟仪器的操作功能像常规仪器一样一目了然。文章基于C语言从图形方式初始化、点醒图形色块、键盘检测与响...
C语言程序设计(常用
函数
说明)
C语言程序设计(常用
函数
说明) C 语言是1972年由美国的Dennis Ritchie设计发明的,并首次在UNIX操作系统的 DEC PDP-11计算机上使用。它由早期的编程语言 BCPL(Basic Combind Programming Language)发展演变而来。在1970年,AT&T贝尔实验室的 Ken Thompson根据BCPL语言设计出较先进的并取名为
linux 操作系统下c语言编程入门
2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理 7)Linux程序设计入门--线程操作 8)Linux程序设计入门--网络编程 9)Linux下C开发工具介绍 1)Linux程序设计入门--基础知识 Linux下C语言编程基础知识 前言: ...
Linux下C语言编程资料
1(Linux程序设计入门——基础知识Linux下C语言编程基础知识前言:这篇文章介绍在LINUX下进行C语言编程所需要的基础知识。在这篇文章当中,我们将会学到以下内容:源程序编译Makefile的编写程序库的链接程序的调试头文件和系统求助 1.源程序的编译在Linux下面,如果要编译
一个
C语言源程序,我们要使用GNU的gcc编译器。 下面我们以
一个
实例来说明如何使用gcc编译器。
C语言
70,037
社区成员
243,243
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章