您当前的位置:首页 > 计算机 > 编程开发 > C语言

怎样在C语言程序中使用功能键和箭头键?

时间:12-31来源:作者:点击数:

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

然而,与其它“特殊”功能一样,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。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门