C语言:监听键盘
所谓键盘监听,就是用户按下某个键时系统做出相应的处理,本章讲到的输入输出函数也是键盘监听函数的一种,例如 getchar()、getche()、getch() 等。下面的代码演示了 getche() 函数的使用:
- #include <stdio.h>
 - #include <conio.h>
 - int main(){
 - char ch;
 - int i = 0;
 - //循环监听,直到按Esc键退出
 - while(ch = getch()){
 - if(ch == 27){
 - break;
 - }else{
 - printf("Number: %d\n", ++i);
 - }
 - }
 - return 0;
 - }
 
在 Windows 下的运行结果:
Number: 1  //按下任意键
Number: 2  //按下任意键
Number: 3  //按下任意键
Number: 4  //按下任意键
Number: 5  //按下Esc键退出
这段代码虽然达到了监听键盘的目的,但是每次都必须按下一个键才能执行 getch() 后面的代码,也就是说,getch() 后面的代码被阻塞了。
#include <stdio.h>
#include <conio.h>
int main(){
char ch;
int i = 0;
//按ESC终止输入
printf("%s","按ESC终止输入 \n");
while(ch = getch()){
if(ch == 27){
break;
}else{
printf("第%3d 次输入的字符是 %c\n", ++i,ch);
}
}
return 0;
}
阻塞式键盘监听用于用户输入时一般没有任何问题,用户输入完数据再执行后面的代码往往也符合逻辑。然而在很多小游戏中,阻塞式键盘监听会带来很大的麻烦,用户要不停按键游戏才能进行,这简直就是灾难,所以在小游戏中一般采用非阻塞式键盘监听:用户输入数据后程序可以捕获,用户不输入数据程序也可以继续执行。
在 Windows 系统中,conio.h头文件中的kbhit()函数就可以用来实现非阻塞式键盘监听。
conio.h 是 Windows 下特有的头文件,所以 kbhit() 也只适用于 Windows,不适用于 Linux 和 Mac OS。
用户每按下一个键,都会将对应的字符放到输入缓冲区中,kbhit() 函数会检测缓冲区中是否有数据,如果有的话就返回非 0 值,没有的话就返回 0 值。但是 kbhit() 不会读取数据,数据仍然留在缓冲区,所以一般情况下我们还要结合输入函数将缓冲区种的数据读出。请看下面的例子:
- #include <stdio.h>
 - #include <windows.h>
 - #include <conio.h>
 - int main(){
 - char ch;
 - int i = 0;
 - //循环监听,直到按Esc键退出
 - while(1){
 - if(kbhit()){ //检测缓冲区中是否有数据
 - ch = getch(); //将缓冲区中的数据以字符的形式读出
 - if(ch == 27){
 - break;
 - }
 - }
 - printf("Number: %d\n", ++i);
 - Sleep(1000); //暂停1秒
 - }
 - return 0;
 - }
 
运行结果:
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5  //按下Esc键
每次循环,kbhit() 会检测用户是否按下某个键(也就是检测缓冲区中是否有数据),没有的话继续执行后面的语句,有的话就通过 getch() 读取,并判断是否是 Esc,是的话就退出循环,否则继续循环。
#include <stdio.h>
#include <conio.h>
#include <windows.h>
int main(){
char ch;
int i = 0;
//按ESC终止输入
printf("%s","按ESC终止输入 \n");
while(1){
if (kbhit()){
ch = getch();
if(ch == 27){
break;
}else{
printf("第%3d 次输入的字符是 %c\n", ++i,ch);
}
}
else
{
printf("%s","执行其他的功能。。。\n");
Sleep(10);
}
}
return 0;
}
C语言:监听键盘的更多相关文章
- java 事件监听 - 键盘
		
java 事件监听 - 键盘 //事件监听 //键盘事件监听,写了一个小案例,按上下左右,改变圆形的位置,圆形可以移动 import java.awt.*; import javax.swing.*; ...
 - Vue 监听键盘,键盘修饰符keyup
		
附录:键盘Key Code对照表 代码: <!doctype html> <html lang="en"> <head> <meta ch ...
 - 通过监听键盘,实现对UITextView的内容移动
		
视图出现时,增加观察 - (void)viewWillAppear:(BOOL)animated { // 增加对键盘的监听 [[NSNotificationCenter defaultCenter] ...
 - android监听键盘
		
android中的带有输入功能的页面布局经常被弹出的键盘遮挡,一种处理方法是监听键盘的弹出,设置布局的padding或隐藏某些占位控件,使得输入框不被键盘遮挡.一种常用的方法是当Activity设置为 ...
 - python pynput监听键盘
		
"""小白随笔,大佬勿喷""" #键盘输入 from pynput.keyboard import Key,Controller,Liste ...
 - 第35天学习打卡(输入框 TextField监听 简易计算器,组合+内部类回顾复习 画笔 鼠标监听 窗口监听 键盘监听)
		
1.输入框 TextField监听 package com.kuang.lesson02;  import java.awt.*; import java.awt.event.ActionEven ...
 - Vue中监听 键盘事件及修饰符
		
键盘事件: keyCode 实际值 48到57 0 - 9 65到90 a - z ( A-Z ) 112到135 F1 - F24 8 ...
 - 前端页面,使用 dom 鼠标拖拽画一个矩形和监听键盘
		
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
 - iOS 键盘的监听 调整view的位置
		
iOS在处理键盘的出现和消失时需要监听UIKeyboardWillChangeFrameNotifications/UIKeyboardDidHideNotifications - (void)vie ...
 
随机推荐
- Go语言的GOPATH详解
			
在GOLAND中设置GOPATH: 设置好路径后,并不是直接在这个路径下面写代码文件就行了 GO会识别GOPATH下的src目录,而真正的引用的包名,是src下的目录名,然后才是代码模块名 目录结构如 ...
 - Structured Streaming编程 Programming Guide
			
Structured Streaming编程 Programming Guide Overview Quick Example Programming Model Basic Concepts Han ...
 - 激光雷达lidar与点云数据
			
激光雷达lidar与点云数据 DEM是分布和显示数字地形的首个广泛使用的机制. 点云是在空间中随机放置的3D点的集合.传感器发出能量脉冲并乘以其返回行程(TWTT,双向行程时间).知道了传感器的位置以 ...
 - 全卷积网络Fully Convolutional Networks (FCN)实战
			
全卷积网络Fully Convolutional Networks (FCN)实战 使用图像中的每个像素进行类别预测的语义分割.全卷积网络(FCN)使用卷积神经网络将图像像素转换为像素类别.与之前介绍 ...
 - 35 张图带你 MySQL 调优
			
这是 MySQL 基础系列的第四篇文章,之前的三篇文章见如下链接 138 张图带你 MySQL 入门 47 张图带你 MySQL 进阶!!! 炸裂!MySQL 82 张图带你飞 一般传统互联网公司很少 ...
 - 使用Vue写一个九九乘法表
			
Vue.js是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计. 下面是在Vue 测试实例 - 菜鸟教程(runoob.com)使用Vue写的一个九九乘法表, ...
 - Python-selenium,切换句柄及封装
			
一.获取当前句柄及所有句柄 handle=driver.current_window_handle #获取当前窗口句柄print(handle)handles=driver.window_handle ...
 - P1045 [NOIP2003 普及组] 麦森数
			
题目描述 形如2^P−1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2^P−1不一定也是素数. 到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377, ...
 - 三、Nginx设置用户认证
			
要求:通过nginx服务端配置实现以下目标 访问web页面需要进行用户认证. 用户名为:tom,密码:123456 操作步骤, 更改配置文件 [root@client ~]# vim /usr/loc ...
 - 08:jQuery(01)
			
今日内容概要 jQuery(封装了js的前端框架(模块)) 很容易与DOM操作混淆 jQuery """ jQuery内部封装了原生的js代码(还额外添加了很多的功能) ...