• 微信号
  • 微信号
您当前的位置:首页 > 学海无涯 > 茑语花香>C语言非阻塞式键盘监听,用户不输入数据程序也能继续执行

C语言非阻塞式键盘监听,用户不输入数据程序也能继续执行

孤峰 孤峰家 2023-06-18 158人阅读

所谓键盘监听?就是用户按下某个键时系统做出相应的处理?本章讲到的输入输出函数也是键盘监听函数的一种?例如 getchar()、getche()、getch() 等。下面的代码演示了 getche() 函数的使用?

在 Windows 下的运行结果=

Number: 1 //按下任意键

Number: 2 //按下任意键

Number: 3 //按下任意键

Number: 4 //按下任意键

Number: 5 //按下Esc键退出

这段代码虽然达到了监听键盘的目的=但是每次都必须按下一个键才能执行 getch() 后面的代码=也就是说=getch() 后面的代码被阻塞了。

阻塞式键盘监听用于用户输入时一般没有任何问题=用户输入完数据再执行后面的代码往往也符合逻辑。然而在很多小游戏中=阻塞式键盘监听会带来很大的麻烦=用户要不停按键游戏才能进行=这简直就是灾难=所以在小游戏中一般采用非阻塞式键盘监听=用户输入数据后程序可以捕获=用户不输入数据程序也可以继续执行。

在 Windows 系统中=conio.h头文件中的kbhit()函数就可以用来实现非阻塞式键盘监听。 conio.h 是 Windows 下特有的头文件=所以 kbhit() 也只适用于 Windows=不适用于 Linux 和 Mac OS。

用户每按下一个键=都会将对应的字符放到输入缓冲区中=kbhit() 函数会检测缓冲区中是否有数据=如果有的话就返回非 0 值=没有的话就返回 0 值。但是 kbhit() 不会读取数据=数据仍然留在缓冲区=所以一般情况下我们还要结合输入函数将缓冲区种的数据读出。请看下面的例子=

运行结果=

Number: 1

Number: 2

Number: 3

Number: 4

Number: 5 //按下Esc键

每次循环=kbhit() 会检测用户是否按下某个键=也就是检测缓冲区中是否有数据==没有的话继续执行后面的语句=有的话就通过 getch() 读取=并判断是否是 Esc=是的话就退出循环=否则继续循环。

转载:感谢您阅览,转载请注明文章出处“来源从小爱孤峰知识网:一个分享知识和生活随笔记录的知识小站”。

链接:C语言非阻塞式键盘监听,用户不输入数据程序也能继续执行http://www.gufeng7.com/niaolang/451.html

联系:如果侵犯了你的权益请来信告知我们删除。邮箱:119882116@qq.com

标签: