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

c语言中怎样输入方向键?方向键的ascII码是多少?bioskey();和kbhit();怎么读取方向键?我想写成“if(方向键1)。。。elseif(方向键2)。。。e... c语言中怎样输入方向键?方向键的ascII码是多少 ?bioskey();和kbhit();怎么读取方向键?我想写成“if(方向键1) 。。。else if(方向键2)。。。else。。。”这种格式
该怎么写?
展开
 我来答
鸣蝉百
2020-03-01 · TA获得超过894个赞
知道答主
回答量:186
采纳率:100%
帮助的人:14.8万
展开全部

在C代码中可设置如下自编的intokey(  )函数,用以接收方向键值。库函数kbhit( )是检测是否有按键被按下,库函数getch(  )是读取键盘按键值的,不需按回车,也不回显。dir是代表方向的变量,根据不同的方向键值,让dir取1到4这四个不同的值。其它的程序段就可根据dir的值让东西朝某个方向移动。方向键按下后会产生2个值,第一个是224,另一个分别为上下左右的72、80、75、77,因此要读取2次值来判断。要包含#include<conio.h> .

void  intokey(  )

  {  int  flag;

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

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

            if (flag==224)

               { flag = getch(  );  //值为224时表示按下了方向键,要再次获取才行

                 if ( flag==72 && dir != 2 )  dir = 1; 

                 if ( flag==80 && dir != 1 ) dir = 2; 

                if ( flag==75 && dir != 4 )  dir = 3; 

                if ( flag==77 && dir != 3 )  dir = 4; 

               }

          if (flag==13)

               {  while( 1 )  if ( ( flag=getch( ) )==13 )  break ;  }

      }

}

注:这个函数来源于某些“贪吃蛇”的代码,略有修改,足可获取方向键值。其中的1、2、 3、4分别对应着上下左右。当flag获得键值后,分两种情况:一是flag=224,此时再次获取键值以判断输入的是4个方向中的哪一个;二是flag=13,表示按下回车键,我们就执行循环,程序暂停,等待再次输入回车,程序继续运行。

文正153
推荐于2020-03-03 · TA获得超过2.1万个赞
知道大有可为答主
回答量:2221
采纳率:63%
帮助的人:608万
展开全部
一般是使用getch获取
方向键(←): 0xe04b
方向键(↑): 0xe048
方向键(→): 0xe04d
方向键(↓): 0xe050
一个方向键要用两个getch才能把它的数据获取完.
然后对应着两个字符数据, 一个当高位, 一个当低位, 就可以判断按下的是什么键, 如:
char ch = getch();
if(ch == 0xe000) //如果高位相等
{

ch = getch(); //那么再获取一个
if (ch == 0x004b) //如果低位也相同(和方向键左一样)
.... //你要执行的动作.

}
else //如果不是, 把这个字符吸收了.

getch()

新版的VC版本用_getch替换了.
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百鸣蝉
2020-02-24 · TA获得超过216个赞
知道答主
回答量:55
采纳率:0%
帮助的人:2.8万
展开全部
在贪吃蛇中定义了intokey( )函数[你也可以改成别的],整个函数体中的代码就是获取键盘
的方向键值,倒数第2-5行是获取回车键值,用于起暂停作用。这里用direction表示方向,
程序中UP、DOWN、LEFT、RIGHT分别固定代表1、2、3、4这四个值。第三行判断获得
了向上的键值,第四行在direction不等于DOWN值(就是2)时执行else {direction = UP; }
第(5、6);(7、8);(9、10)等行的意思,与这第(3、4)行类似,只是取值不同。
要包含文件 #include<conio.h> 。
void intokey()
{
if (GetAsyncKeyState(VK_UP) && 0x8000)
{ if (direction == DOWN) { } else {direction = UP; } }
if (GetAsyncKeyState(VK_DOWN) && 0x8000)
{ if (direction == UP) { } else {direction = DOWN; } }
if (GetAsyncKeyState(VK_RIGHT) && 0x8000)
{ if (direction == LEFT) { } else {direction = RIGHT; } }
if (GetAsyncKeyState(VK_LEFT) && 0x8000)
{ if (direction == RIGHT) { } else {direction = LEFT; } }
if (GetAsyncKeyState(VK_RETURN) && 0x0D)
{ while (1)
{ if (GetAsyncKeyState(VK_RETURN) && 0x0D) { break; } }
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
就无名
2019-03-27 · TA获得超过192个赞
知道答主
回答量:154
采纳率:0%
帮助的人:46.6万
展开全部
哪有他们说的那么复杂,直接 int ch = _getch(); 试试不就知道了?上下左右都是不一样的;注意是 int 不是 char ;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2017-11-25
展开全部
可以使用 _getch 函数

#include <stdio.h>
#include <conio.h>

void main()
{
char key, key2;
bool needNextKey = false;

while( ( key = _getch() ) != 27 ) //press ESC to break
{
if( needNextKey )
{
if( key2 == -32 )
{
if( key == 75 ) //left
{
printf_s( "<--\n" );
}
else if( key == 77 ) //right
{
printf_s( "-->\n" );
}
}
needNextKey = false;
}
if( key <= 0 )
{
key2 = key;
needNextKey = true;
}
}

printf_s( "press any key to continue...\n" );
_getch();

}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式