</pre>C语言中捕获键盘敲击的方法</h1><blockquote style="margin:0 0 0 40px; border:none; padding:0px"><h2><span style="color:#333333"><span style="font-size:24px">问题简述</span></span></h2><div><span style="color:#333333"><span style="font-size:18px">在C语言程序设计中,我们要写一个简单的控制菜单。很好的一种做法如下</span></span></div><div><span style="font-size:18px"><span style="color:#333333"></span></span><pre name="code" class="cpp"></pre><pre name="code" class="cpp"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;">while(choise)</span></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;">{</span></span>
<span style="font-size:18px;"><span style="white-space:pre"></span></span><pre name="code" class="cpp" style="color: rgb(51, 51, 51);"><pre name="code" class="cpp" style="color: rgb(51, 51, 51);"><span><span style="font-size:18px;"> system("cls"); //清屏</span></span>
<span style="font-size:18px;"><span style="white-space:pre">  </span>主菜单显示</span>
<span style="font-size:18px;"><span style="white-space:pre">   </span>//输入操作选项</span>

switch(choise){

<span style="font-size:18px;"><span style="white-space:pre">   </span>case:</span>
<span style="font-size:18px;"><span style="white-space:pre"><span style="white-space:pre">    </span></span>   //Do anything you want<span style="white-space:pre">  </span>   </span>
<span style="font-size:18px;"><span style="white-space:pre"> </span>break;</span>
<span style="font-size:18px;"><span style="white-space:pre"><span style="white-space:pre">   </span></span> ..............<span style="white-space:pre">    </span>    </span>
<span style="font-size:18px;"><span style="white-space:pre">    </span>default:</span>
<span style="font-size:18px;"><span style="white-space:pre"><span style="white-space:pre">     </span></span>choise = 0;</span>
<span style="font-size:18px;"><span style="white-space:pre">   </span>break;</span>
<span style="font-size:18px;"><span style="white-space:pre">  </span>}</span>

任何时候你想要为程序增加一个相应功能菜单,都可以通过改变这个里边的显示项达到你的目的。

那么,有时间我们在菜单内需要直接捕获键盘输入直接进入功能块,而不用在选项之后按下Enter键才行。这就是我将要做的事情了

具体实现


在C库中,为我们提供个一个神奇的函数kbhit(); //keyboard  hit  (键盘敲击)在msdn中是这样描述的

_kbhit

Checks the console for keyboard input.

int _kbhit( void );

Routine Required Header Compatibility
_kbhit <conio.h> Win 95, Win NT

示例如下:

#include <conio.h>
#include <stdio.h>void main( void )
{/* Display message until key is pressed. */while( !_kbhit() )_cputs( "Hit me!! " );/* Use _getch to throw key away. */printf( "\nKey struck was '%c'\n", _getch() );_getch();
}

Output

Hit me!! Hit me!! Hit me!! Hit me!! Hit me!! Hit me!! Hit me!!
Key struck was 'q' 

解释:

具体就是当你不敲击键盘时,程序会一直在while内部进行事务处理,当你敲击键盘被捕捉时,那么久进入你给的控制方向运行
例如当你写个动态时钟显示之时,可以将具体的时间显示函数放在while里边,每秒更新一次(通过sleep())。。然后捕捉键盘操作退出。
这样就避免了无法退出死循环的问题了。

补充篇

对于键盘操作的捕获操作并非如此简单而已, 它还可以让你具体的做很多事情。例如,捕获键盘输入指定键,进行程序的分支选择。这是个很好的扩充,那么问题来了。你如何知道自己捕获的是哪个按键呢。
这个就涉及到键盘扫描码的使用了。

键盘扫描码 (来自百度百科)

B 添加义项

?

键盘上的每一个键都有两个唯一的数值进行标志。为什么要用两个数值而不是一个数值呢?这是因为一个键可以被按下,也可以被释放。当一个键按下时,它们产生一个唯一的数值,当一个键被释放时,它也会产生一个唯一的数值,我们把这些数值都保存在一张表里面,到时候通过查表就可以知道是哪一个键被敲击,并且可以知道是它是被按下还是被释放了。这些数值在系统中被称为键盘扫描码。

那么具体的扫描码匹配问题就留给各位自己去百度了。
简单的程序示例:
至于程序中所说的字符元键,控制键都是本人杜撰的,只是因为  所谓字符元键需要一个getch接收,而控制类键需要两个(1或者2字节)
而2字节的那个,第一个字节内容又都是一样的  所以本猿将只通过一个if语句区分。。不至于你输入元键时按下两次才有效果。
<span style="font-size:18px;">enum {UP = 0x48 ,PD = 0x49,L = 0x4b,R = 0x4d, D = 0x50,PU = 0x51,C = 0x63,S = 0x73};
<span style="white-space:pre">     </span><span style="font-family: arial, sans-serif; text-indent: 2em;">if(( c = getch()) != 0xffffffe0)</span></span>
<span style="font-size:18px;"><span style="white-space:pre">    </span>    //字符元键(简单字符键如  a,b,c...)
<span style="white-space:pre">     </span>{<span style="white-space:pre">   </span>choise = c;   }
<span style="white-space:pre">     </span>else
<span style="white-space:pre">     </span>{
<span style="white-space:pre">     </span>//控制键位宽(控制类按键如  方向键,ctrl.....)
<span style="white-space:pre">         </span>choise = getch();
<span style="white-space:pre">     </span>}
<span style="white-space:pre"> </span>switch(choise)
<span style="white-space:pre"> </span>{case UP:printf("↑");system("pause");break;........case PD:printf("PD  %c",choise);system("pause");break;default:break;
<span style="white-space:pre"> </span>}</span>

对于这个问题还有什么疑问请留言交流,如不能及时回复请见谅。

通过PC机键盘输入汉字时,其中经过多次的代码转换:《仅作了解》

用户---汉字输入码---键盘---键盘扫描码---BIOS键盘驱动程序----ASCII码----汉字输入软件----汉字内码

通过PC机键盘输入汉字时,其中经过多次的代码转换:《仅作了解》

用户---汉字输入码---键盘---键盘扫描码---BIOS键盘驱动程序----ASCII码----汉字输入软件----汉字内码

C语言捕获键盘敲击的方法kbhit相关推荐

  1. c语言记录键盘敲击次数,【转】你知道一天敲键盘的敲击次数能达到多少么

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 9号上午大概11点多买了新键鼠,键盘自带LCD可以显示敲键次数,当时为0.实测后发现只要敲打任一按键就会增加次数一(废话 = = ) 于是,从9号12点开 ...

  2. java语言中实现键盘输入_Java程序设计中的键盘输入数据的方法分析

    1. 引言 高校中很多学校开设了Java语言程序设计课程,这是一门实践性很强的语言,在程序设计中经常需要从键盘随机输入所需要的数据,Java语言中的键盘输入数据没有像C语言给我们提供的scanf(), ...

  3. c语言清除键盘缓冲区函数,C语言程序中清除键盘缓冲区的方法

    第四期2006年12月益阳职业技术学院学报 JournalofYiyangVocationalandTechnicalCollegeNO.4Dec.2006 C语言程序中清除键盘缓冲区的方法 杨长虹 ...

  4. c语言编写的键盘记录程序,C程序读取键盘码的方法

    本文以一个简单实例讲述了C程序读取键盘码的方法,分享给大家供大家参考.具体分析如下: 一般来说,键盘码在底层开发中经常会用到,有时候我们会忘记它们,就要急急忙忙的去找 键-码 对照表查看,其实程序可以 ...

  5. WPF 利用键盘钩子来捕获键盘,做一些不为人知的事情...完整实例

    原文:WPF 利用键盘钩子来捕获键盘,做一些不为人知的事情...完整实例 键盘钩子是一种可以监控键盘操作的指令. 看到这句话是不是觉得其实键盘钩子可以做很多事情. 场景 当你的程序需要一个全局的快捷键 ...

  6. 数字盲打怎么练_如何提高盲打速度?键盘指法练习方法

    如何提高盲打速度?打字不会盲打,这并不是因为笨,而是因为手感不够,长期工作于计算机环境的用户,也是万丈高楼平地起,从指法练习,眼神不离开键盘开始的,实际上这就是简单易行的键盘指法练习方法. 键盘指法练 ...

  7. 数学模型转化为计算机语言,程序设计语言类课程教学选题方法探讨

    <程序设计语言类课程教学选题方法探讨>由会员分享,可在线阅读,更多相关<程序设计语言类课程教学选题方法探讨(6页珍藏版)>请在人人文库网上搜索. 1.程序设计语言类课程教学选题 ...

  8. 基于易语言的键盘监听器(仅供学习)

    基于易语言的键盘监听器(仅供学习) 软件原理 梳理 输入内容检测部分 发送部分 结束部分 准备工作 邮箱准备 支持库准备 模块准备 窗口准备 代码部分 程序集 启动窗口创建完毕 子程序1 编辑框1内容 ...

  9. Win11怎么改系统语言?Win11系统语言简体改繁体的方法

    Win11怎么改系统语言?有时候我们电脑下载安装系统之后,发现该系统语言不是自己常用的,因此还需要更换系统语言,那么应该如何操作呢?今天小编就为大家带来Win11系统语言简体改繁体的方法,而且用类似的 ...

最新文章

  1. 取出url中的字符_如何在JavaScript中解析URL:例如主机名,路径名,查询,哈希?...
  2. 简单的文本片段替换器
  3. pytorch——torch.backends.cudnn.benchmark = True
  4. little w and Segment Coverage(差分)
  5. 使用 Github Pages 和 Hexo 搭建自己的独立博客【超级详细的小白教程】
  6. /var/spool/postfix/maildrop小文件太多造成inode索引使用完解决
  7. 有毒!OPPO Reno证件照曝光:“铡刀式”前置摄像头抢眼
  8. 十条不错的编程观点(转)
  9. 超简单的memcached集群搭建
  10. C++ 中缀表达式转后缀表达式(两种方式:栈、二叉树)
  11. java 数据库编程(一)JDBC连接Sql Server数据库
  12. Bitvise SSH Client连接Linux服务器教程和使用
  13. java火星坐标转百度坐标,火星坐标(GCJ-02)转百度坐标(BD-09)算法验证
  14. php 图片抠图,php抠图教程(混合模式+剪切蒙版)
  15. Spring内异常 application exception overridden by commit exception
  16. python国内股票数据分析方法_Python股票数据分析
  17. 解决SQL server中提示对象名无效
  18. 性能测试基础培训 - PPT下载
  19. 怎么用软碟通制作U启动和再生龙恢复LINUX系统及备份
  20. JQuary(从原生js到jq,就发现jq好简单)

热门文章

  1. 【渝粤题库】陕西师范大学163103 旅游资源与开发 作业 (高起专)
  2. 欧拉回路的matlab算法,「学习笔记」欧拉回路算法
  3. cat3速度 rj45_CAT6E RJ45网络连接器卡侬支架 CAT3 CAT5 CAT5E
  4. linux多线程编程实现圆周率,linux环境下使用Monte Carlo计算π
  5. 计算机学院毕业季主题,毕业季 | 计算机学院2020届毕业生成长纪念册出炉!
  6. 网络营销之百度问答平台(1)
  7. 区块链职业技术技能标准的出台,对区块链人才培养具有指导意义
  8. 电脑系统转移到ssd固态硬盘
  9. 图解USB标准之架构概览
  10. 在c语言中1和0的意思,C语言里的0x0和0x1是什么意思啊