2025年4月2日 星期三 乙巳(蛇)年 正月初三 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > C语言

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

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

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

然而,与其它“特殊”功能一样,C语言本身并没有提供读入功能键和箭头键的标准方法。用scanf()来接受这些特殊字符是不可取的,同样,用getchar()也不行。为此,你需要编写一个小函数,让它向DOS询问被按下的键的值。请看下例:

  • #include<dos.h>
  • int GetKey()
  • {
  • union REGS inout;
  • 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。

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