关于获取键盘值的问题

yihan7h 2007-05-31 05:48:40

int keykey()

{
int key;

while(bioskey(1)==0);

key=bioskey(0);

key=key&0xff ? key&0xff:key>>8;

return(key);
}
要写一个控制台程序,实现实时接收键盘盘输入,在屏幕显示相应字符。用这个函数

可以做到,可是运行时有很严重的延时,CPU长时间100%,试了两台电脑都这样,为

什么会这样?感觉好怪!
...全文
250 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yihan7h 2007-05-31
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "conio.h"
#include "graphics.h"
#include "stdlib.h"
main()
{
int key;
int x=1,
y=1;



while (!kbhit())
{
key=bioskey(0);

key=key&0xff ? key&0xff:key>>8;


putch(key);

x=x<80?x+1:1;

}


system("pause");
}

改成这样以后,延时要小多了,感觉还可以。绝大部分键盘值都能响应,像字符和数字,以及shift组合键等,可是功能键,比如上下左右的方向键以及回车和退格键不能正常响应,
按上:输出H
按下:输出P
按左:输出K
按右:输出M
按退格:没有删除字符,仅仅是光标退了一格
按回车:回到所在行的开头

//希望的是光标按相应的方向移动,回车和退格也实现相应功能。


虽然可以用获取键盘码来实现,
如:
#define KB_DOWN 0x4800//键盘码
#define KB_UP 0x5000
#define KB_LEFT 0x4b00
#define KB_RIGHT 0x4d00

key=bioskey(0);
switch(key)
{
case KB_UP: if(y<25) gotoxy(x,++y);
break;
case KB_DOWN: if(y>1) gotoxy(x,--y);
break;
case KB_LEFT: if(x>1) gotoxy(--x,y);
break;
case KB_RIGHT: if(x<80) gotoxy(++x,y);
break;

}
不这样可以实现吗?

我觉得用 key=key&0xff ? key&0xff:key>>8;应该对功能键也返回相应的ASCII值呀,为什么会出现上

述问题呢?

yoyo_alex_lw 2007-05-31
  • 打赏
  • 举报
回复
while(bioskey(1)==0);->100%

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧