#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);}
}
----------------解决方案--------------------------------------------------------