c语言中功能键和箭头使用


在程序中使用功能键和箭头键可以使程序更容易使用。箭头键可用来移动光标,而功能键使用户能做一些特殊的事情,还可用来替代一些经常要键入的字符序列。

然而,与其它“特殊”功能一样,C语言本身并没有提供读入功能键和箭头键的标准方法。用scanf()来接受这些特殊字符是不可取的,同样,用getchar()也不行。为此,你需要编写一个小函数,让它向DOS询问被按下的键的值。请看下例:
    #include<dos.h>
    int GetKey()
    {
       union REGS in,out;
       in.h.ah=0x8;
       int86(0x21,&in,&out);
       return out.h.al;
    }
这种方法跳过C的输入/输出库,直接从键缓冲区中读取下一个键。这样做的好处是不会漏掉特殊的键码,并且所按的键能立即得到响应,而不用先存到缓冲区中,等到按下Enter键时才得到响应。

通过这个函数你可以得到所按的键的整数值键码。请看下面这个测试程序:   
# include <stdio. h>
# include <dos. h>
int GetKey()
      union REGS in, out ~
      in. h. ah = 0xS~
      int86( 0x21, &in, &out );
      return out. h. al;
int main()
{
      int c ;
      while (   c=GetKey() ) !=27 )
                     / * Loop until escape is pressed */
     {
          printf ("Key = %d.\n" , c );
     }
       return 0 ;
}
如果你键入一个字符串,那么上述程序可能会输出这样的结果:
    key = 66.
    key=111.
    key=98.
    key=32.
    key=68.
    key=111.
    key=98.
    key=98.
    key=115.
当你按下功能键或箭头键时,将发生不同的情况:你所看到的将是一个0,其后跟着一个字符值。这就是特殊键的表示方法:在一个0值后面跟着一个特殊的值。

因此,你可以用两种方法来处理特殊键。首先,你可以检测GetKey()的返回值,一旦检测到一个0,你就按特殊的方式去处理GetKey()读入的下一个字符。其次,你可以在GetKey()中检测读入的字符值,一旦检测到一个0,就接着读入下一个字符值,然后按某种方式修改这个值,并返回修改后的值。第二种方法比第一种方法更好。下面是一个改进了的GetKey()函数:
/*  
New improved key-getting function.
*/
int GetKey()
      union REGS in, out;
      in. h. ah = 0x8;
      int86( 0x21, &in, &out );
      if (out. h. al == 0 )
            return GetKey ( ) + 128 ;
      else
            return out. h. al ;
这种方法中更清晰也最有效,它使程序无需检查是否读入了特殊键,因此减轻了程序员的工作量。在这种方法中,特殊键的值总是大于128。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值