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 ...
随机推荐
- Elasticserch与Elasticsearch_dsl用法
Elasticserch与Elasticsearch_dsl用法 Elasticsearch_dsl::https://elasticsearch-dsl.readthedocs.io/en/late ...
- GO语言面向对象02---继承
package main import ( "fmt" ) type Dog struct { Name string Age int } func (d *Dog)bite() ...
- 单目摄像头检测6D姿态
单目摄像头检测6D姿态 CVPR2019: ROI-10D: Monocular Lifting of 2D Detection to 6D Pose and Metric Shape 论文链接: h ...
- 相机自动对焦AF原理
相机自动对焦AF原理 AF性能是判断相机好坏的重要指标,主要从准确度和速度两个方面来进行考察,本文将介绍自动对焦的几种方式. 一.凸透镜成像原理 二.三种对焦方法 有公式在手,只要给相机安个测距仪就好 ...
- Nucleus SE RTOS初始化和启动
Nucleus SE RTOS初始化和启动 Nucleus SE RTOS initialization and start-up 对于任何类型的操作系统,都有某种类型的启动机制.具体的工作方式因系统 ...
- 源码简析Spring-Integration执行过程
一,前言 Spring-Integration基于Spring,在应用程序中启用了轻量级消息传递,并支持通过声明式适配器与外部系统集成.这一段官网的介绍,概况了整个Integration的用途.个人感 ...
- 【NX二次开发】Block UI 线性尺寸
属性说明 常规 类型 描述 BlockID String 控件ID Enable Logical 是否可操作 Group Logical ...
- 题解 P3233 [HNOI2014]世界树
题目传送门 解题思路 正解当然是虚树了. 首先对于原树以及虚树各开一个结构体存边,这个不用多说. 然后我们先 DFS 一遍,求出各个节点的时间戳,子树大小,深度以及父亲节点,并初始化倍增 LCA . ...
- sql循环说明
while循环:主要是判断,不能使用表中的ID,临时表是ID自增的,通过自增ID可以查出表ID(语法简单,需要配合其他代码操作表ID)游标循环:可以使用表中的ID ,进行修改等操作(语法难一点,核心代 ...
- 在 raspberry pi pico 上体验 MicroPython
raspberry pi pico 官方提供 2 种开发方式,其中一种是使用 python3 开发,树莓派提供了 MicroPython 固件,把这个固件烧录进去,就可以 在 pico 上跑 pyth ...