阻塞式
#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;
}
运行结果:
Number: 1 //按下任意键
Number: 2 //按下任意键[按住]
Number: 3
Number: 4 //[松开]
Number: 5 //按下Esc键
使用conio.h
头文件中的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(100);
//暂停0.1秒
}
return 0;
}
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5 //按下Esc键
每次循环,kbhit 会检测用户是否按下某个键(也就是检测缓冲区中是否有字符)
没有的话继续执行后面的语句
有的话就通过 getch 读取,并判断是否是 Esc,是的话就退出循环,否则继续循环。
Sleep 是“睡眠”的意思,用来让程序暂停执行一段时间,以毫秒记。