当前位置: 代码迷 >> C语言 >> 新手,求上下左右的asc怎么前面都有0阿~
  详细解决方案

新手,求上下左右的asc怎么前面都有0阿~

热度:291   发布时间:2008-03-17 13:39:51.0
LZ````我刚才找到我以前的专门用来调试使用getch()获得的键值的数字值及其字符形式的程序,我刚才又把它重新修改了一下.现在把它送给你,你以后要用getch获取键值的时候可能用得住,用它你可以发现很多东西.

#include <stdio.h>
#include <conio.h>  /*  getch所在头文件  */

#define NL putchar('\n')
#define MID -32
#define F1_F10 0
#define CTRL_Z 26

/*  将getcH获得的值用整数和字符的形式输出用空格分开  */
#define CHAR_INT_C(c) printf ("%c", c ) , putchar(' ') , printf ("%d", c ) , NL

/*  程序为了读取所以键值,所以单独按任何键都不回退出,但是如果连续按2次CTRL+Z(EOF)那么程序回才退出  */
#define EXIT(c) ( c == CTRL_Z ) ? ( ( ( c=getch() ) == CTRL_Z ) ? (1):(0) ) : (0)

int main(void)
{
    char c ;
   
    while ( 1 )   
    {
          c = getch();  /*  开始读取  */
         
          CHAR_INT_C(c) ; /*  输出2种值*/
         
          /*  MID  为中键盘 F1_10 为F1-F10的键``因为它们都是一个键有2个键值 */
          if ( c == MID  || c == F1_F10 )  
          {
               c=getch() ;  /* 读取第二个键值 */
               CHAR_INT_C(c) ; /* 输出第二个键值 */
          }
         
          NL ;
         
          if ( EXIT(c) ) break ; /* 退出请连续按2次CTRL+Z  */
         
    }
   
    return 0 ;
}


这个是EXE:
----------------解决方案--------------------------------------------------------
当然``有些个别键是没有办法读取的``我调试了下``以下键``我的程序``无法读取:

数字锁定键: Num LOCK(小键盘7上面的那个键)
3个组合键: ALT    SHIFT    CTRL
中键盘最上面的3个键: PrScrnSysRq  SdrollLock  PauseBreak
大小写锁定键: CapsLock
WINDOWS开始键和右CTRL旁边的那个键

这几个读取不了``其他都没问题``当然有些键和组合键一起能读取某些值但是有些键和组合键
一起却什么都读不了
----------------解决方案--------------------------------------------------------
用不同的编译器是不同的。
vc和tc都是getch碰到特别值返回0,再用一次getch()可以得到键盘码;
但是devcpp有时返回-32,比如在方向键盘区上下左右先返回-32,但在小键盘区,把梳子输入关闭了,返回的同样是0。
据说原理是先返回低八位在返回高八位。
tc中有检测键盘状态的函数,可以看到一些特别建是否被按下
----------------解决方案--------------------------------------------------------
刚到家,非常感谢各位~但是我又做了个程序~只用到了while,就能解决这个问题了,各位高手能看看到底是怎么回事?

----------------解决方案--------------------------------------------------------
貌似是tc编译出来的。。。
----------------解决方案--------------------------------------------------------
回复 10# 的帖子
他的意思是要按一个健不用等回车就有反应,或是可以接受特殊建,getchar()达不到要求
----------------解决方案--------------------------------------------------------
俄。。。是tc的~那么是怎么回事呢
----------------解决方案--------------------------------------------------------
没什么。。。看见dos虚拟机了,感叹一下
----------------解决方案--------------------------------------------------------
实话说我只会tc。。。vc一直没想去用。。。各位大侠~这怎么回事阿 ?
----------------解决方案--------------------------------------------------------
/*做出来就发出来,真是欺我朝无人那!*/  /*玩笑*/
#include "stdio.h"

main()
{
  int key;
  while(1)
  {key=getch();

    printf("\r\b%d",key);}
      
}
----------------解决方案--------------------------------------------------------
  相关解决方案