135-1821-9792

c语言读取键值的函数 c语言读取键盘输入字符

c语言中怎样输入和读取方向键

在用C语言写出的“贪吃蛇”小游戏中,可以自编以下这个intokey( )函数,用来获取方向键值以便控制蛇的拐弯。库函数kbhit( )是检测是否有按键被按下,Dir是代表方向的变量,整型变量flag用来获取键值,1、2、3、4分别表示方向的上下左右。要#includeconio.h .

为桃城等地区用户提供了全套网页设计制作服务,及桃城网站建设行业解决方案。主营业务为网站设计制作、做网站、桃城网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

void intokey( )

{  int flag;

if ( kbhit( ) )  //判断有键按下时才执行下面操作

{ flag = getch( );  //用flag来获取键值

if (flag==224) flag = getch( ); //值为224是方向键,要再次获取才行

if (flag==72 dir != 2)  dir = 1; //方向键为“上”且原方向不为下时,让dir=1.

if (flag==80 dir != 1) dir = 2; //方向键为“下”且原方向不为上时,让dir=2.

if (flag==75 dir != 4)  dir = 3; //方向键为“左”且原方向不为右时,让dir=3.

if (flag==77 dir != 3)  dir = 4; //方向键为“右”且原方向不为左时,让dir=4.

}

}

注:上下左右键按下后都会产生2个值,第一个是224,第二个才分别是72、80、75和

77.所以要用库函数getch( )两次获取键值。如果是ASDW来控制拐弯,flag可以定义为

字符型,获取一次键值即可。

请问下c语言从键盘读入控制键键值如何实现?

用bioskey()函数;在dos.h头文件中!

函数原型:int bioskey (int cmd)

说明:bioskey()的函数原型在bios.h中

bioskey()完成直接键盘操作,cmd的值决定执行什么操作。

cmd = 0:

当cmd是0,bioskey()返回下一个在键盘键入的值(它将等待到按下一个键)。它返回一个16位的二进制数,包括两个不同的值。当按下一个普通键时,它的低8位数存放该字符的ASCII码;对于特殊键(如方向键、F1~F12等等),低8位为0,高8位字节存放该键的扫描码。

cmd = 1:

当cmd是1,bioskey()查询是否按下一个键,若按下一个键则返回非零值,否则返回0。

cmd = 2:

当cmd是2,bioskey()返回Shift、Ctrl、Alt、ScrollLock、NumLock、CapsLock、Insert键的状态。各键状态存放在返回值的低8位字节中。

字节位 含义

0 右边Shift键状态

1 左边Shift键状态

3 Ctrl键状态

4 Alt键状态

5 ScrollLock键状态

6 NumLock键状态

7 CapsLock键状态

8 Insert键状态

方向键可以用下面的程序啊!

#define Key_Up 0x4800/*up*/

#define Key_Down 0x5000/*down*/

#define Key_Right 0x4d00/*right*/

#define Key_Left 0x4b00/*left*/

int key=bioskey(0);

switch(key)

{

case Key_Up:/*code*/

case Key_Down:/*code*/

case Key_Left:/*code*/

case Key_Right:/*code*/

}

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语言读取键值的函数 c语言读取键盘输入字符
文章分享:http://kswsj.com/article/ddgpigg.html

其他资讯



Copyright © 2009-2022 www.kswsj.com 成都快上网科技有限公司 版权所有 蜀ICP备19037934号