正文
c语言识别键盘敲入函数 c语言读取键盘按键
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
C语言 如何在一段时间内检测键盘是否按下
#include bios.h
#include stdio.h
main()
{
int key;
for(;;)
{
if (bioskey(1)) /*有键按下,读取键值*/
key=bioskey(0);
else /*无键按下,返回0*/
key=0;
switch(key)
{case 0: ...../*无按键,执行该操作*/
case 0xXXXXH:..../*不同键值,做不同处理*/
。。。。。
}
}
}
该程序段功能:
判断是否有键按下,若有进行不同操作,若无进行其他操作。
相关原理:
函数名: bioskey
功 能: 直接使用BIOS服务的键盘接口
函数原型:int bioskey (int cmd)
说明:bioskey()的函数原型在bios.h中
bioskey()完成直接键盘操作,cmd的值决定执行什么操作。
cmd = 1:
当cmd是1,bioskey()查询是否按下一个键,若按下一个键则返回非零值,否则返回0。
键盘有按键时,会把键值(扫描码)存入缓冲区,当需要判断是否有键按下时,扫描缓冲区,为空则无键按下,不为空则有键按下。注意:该功能并不清空缓冲区。
cmd = 0:
当cmd是0,bioskey()返回键盘键入的值。它返回一个16位的二进制数,包括两个不同的值。当按下一个普通键时,它的低8位数存放该字符的ASCII码,高8位存放该键的扫描码;对于特殊键(如方向键、F1~F12等等),低8位为0,高8位字节存放该键的扫描码。
其操作步骤为:
1.检测缓冲区是否有数据;
2.没有则继续第一步;
3.读取缓冲区第一个单元中的键盘输入
4.读取的扫描码
5.将已读取的键盘输入从缓冲区删除
C语言获取按键信息函数
这个程序应该满足c语言识别键盘敲入函数你c语言识别键盘敲入函数的要求吧。
#include stdio.h
#include conio.h
int main(void)
{
while (1)
{
if (!kbhit())
printf("1");
else
{
char c = getch();
if (c == 'a')
{
putchar('2');
getch();
}
}
}
return 0;
}
在C语言中,运行程序时,如何通过键盘输入激活一个函数。
比较简单的方法就是用一个子线程来获得键盘输入的字符,当该字符是你想要的字符,则改变一个全局变量值,主函数定期来检测这个全局变量(比如每一次循环中检查一次),当发现全局变量改变就调用某个函数。。。。
在C语言中通常使用 什么函数获得用户从键盘上的输入
scanf函数
scanf("%d",a); 输入一个整数赋值给a;
scanf("%f",a); 输入一个浮点数赋值给a;
scanf("%c",a); 输入一个字符赋值给a;
scanf("%s",%a); 输入一个字符串赋值给a;
C语言键盘内容读取
综观TC提供的键盘输入函数,以bioskey函数为最合适选择。
int bioskey(int cmd);
使用BIOS中断0x16执行各种键盘操作。参数cmd确定实际得操作。
bioskey的返回值由cmd决定:
0:低8位非0,返回在队列中等待的下一输入键的ascii字符或键盘的下一次按键输入的ascii字符。低8位为0,则高8位为扩展键盘码。
1:测试是否有可读的输入键,为0,则没有。Ctrl_break 返回0xffff(-1)。否则,返回下一个输入键。键值还保存,供下次cmd=0时bioskey调用返回。
2:请求当前换档键状态。状态值由下列值相或(or)得到:
位7 0x80 Insert ON
6 0x40 Caps ON
5 0x20 Numlock ON
4 0x10 Scroll Lock ON
3 0x08 ALT
2 0x04 CTRL
1 0x02 - SHIFT
0 0x01 - SHIFT
为了方便起见,我们首先定义一些常用功能键的键值。
#define ReturnKey 0x0d
#define ESC 0x1b
#define Back 0x08
#define LeftArrow 0x4b00
#define RightArrow 0x4d00
#define UpArrow 0x4800
#define DownArrow 0x5000
#define PageUp 0x4900
#define PageDown 0x5100
#define Home 0x4700
#define End 0x4f00
#define F1 0x3b00
#define F2 0x3c00
#define F3 0x3d00
#define F4 0x3e00
#define F5 0x3f00
#define F6 0x4000
#define F7 0x4100
#define F8 0x4200
#define F9 0x4300
#define F10 0x4400
int GetKey(void)
{
int tKey;
while(bioskey(1)==0)
;
tKey=bioskey(0);
if ((tKey 0xff)!=0)
tKey=tKey 0xff;
return tKey;
}
以上代码,可基本完成常用程序键盘读取操作。
但我们必须注意到,对于函数GetKey的定义中,bioskey函数的使用,我们只是对cmd=0,1的情况进行了处理,而对于cmd=2,也即换档键状态没有进行处理,因而诸如ctrl-home等等GetKey不能进行相应的接收,如果确实需要,须继续扩充GetKey函数。
C语言里面如何两次用scanf函数获取键盘输入的字符
scanf接收字符时的格式是scanf("%c",ch)(ch是定义过的接收键盘输入字符的变量c语言识别键盘敲入函数,下同);。这种格式下c语言识别键盘敲入函数,无论输入缓冲区里有多少字符c语言识别键盘敲入函数,scanf("%c",ch);都只接收最前面的一个赋给ch,但系统要以'\n'作为输入结束的命令,那么scanf("%c",ch);在接收一个输入字符时必然会把'\n'遗留在缓冲区里。
这样问题就来了,由于'\n'也是一个字符,所以下一个scanf("%c",ch2);就会把上一个scanf("%c",ch);遗留在缓冲区里的'\n'接收并赋给ch2,这就造成第二个scanf("%c",ch2);失去了从键盘接收用户输入的字符的机会(scanf("%c",ch2)只接收一个字符),从而造成代码运行出错。
解决办法很多,在scanf("%c",ch);语句前加getchar();,加fflush(stdin);,甚至把scanf("%c",ch);写两遍都能凑效。但这不仅要消费空间时间,而且阅读也不直观。其实知道了原理解决起来就方便了,最简单的办法是把每一个类似scanf("%c",ch);这样读字符的语句改写成scanf(" %c",ch)(%前有个空格);就可以了,原理是这个空格会命令scanf跳过所有的广义空格(' '、'\t'、'\n'等)再接收字符——当然没有空格就不会有跳过动作——问题就迎刃而解了。
下面提供验证代码:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int main(void){
char a,b;
scanf(" %c",a);
scanf(" %c",b);
printf("%c %c\n",a,b);
return 0;
}
关于c语言识别键盘敲入函数和c语言读取键盘按键的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。