Turboc中如何捕捉按键?

Suncanoe 2002-03-15 12:56:41
教师让我们做一个字符的行编辑器
要求实现光标的前后移动,而且能够响应home和end键
该怎么样写这个程序
请高手指点
...全文
54 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Barks 2002-03-17
  • 打赏
  • 举报
回复
接受相应的键盘码。
kay16 2002-03-17
  • 打赏
  • 举报
回复
while(1)
{
while(bioskey(1)!=0)
{
key=bioskey(0);
key=key&0xff;
if(key==27)break;
}
}
把每个键的ASCII码查到,随便找哪个键都可以响应了,只要键盘上有的都行
kingofvc 2002-03-16
  • 打赏
  • 举报
回复
unio a{
int i;
char ch[2];
} c;
while(bioskey(0));
c.i=bioskey(1);
if(c.ch[0]==0)
{
switch(c.ch[1])
{
case : ....

}
}
wujunwei 2002-03-15
  • 打赏
  • 举报
回复

int get_key()
{
union REGS rg;
rg.h.ah=0;
int86(0x16,&rg,&rg);
return rg.h.ah;
}
Alvin_huai 2002-03-15
  • 打赏
  • 举报
回复
int bioskey(cmd)好像可以!!
试试
dynamic_pump 2002-03-15
  • 打赏
  • 举报
回复
一般的用getch()就可以了,如果有特殊的用中断
d_selenite 2002-03-15
  • 打赏
  • 举报
回复
你这样很浪费cpu时间的。
可以修改中断向量表,指向你自已定义的新的函数
这个函数来处理按键事件,叫什么来的?set_interrupt()
好像是,找一下吧,这在DOS里容易一些,在Windows里还不只这些
还与GDT,LDT有关,要修改LDT,可以找一些相关资料看看
mowangjituan 2002-03-15
  • 打赏
  • 举报
回复
怎么用Lcc在windows下做这个程序?
2ndboy 2002-03-15
  • 打赏
  • 举报
回复
getch()就不错
allen7757 2002-03-15
  • 打赏
  • 举报
回复
先定义
#include "bios.h"
#include "dos.h"
union{int k;char a[2];}key;
key.k=bioskey();
key.a[0]为普通键值
key.a[1]为特殊键值
do{
swith(key.a[0])
{ 'a':
'b':



}while(1);
lw549 2002-03-15
  • 打赏
  • 举报
回复
luoxiao_std01(古董) 说得对,先设计一个循环,在循环内不断地读字符,并根据ascii码判断、处理。最好在循环之前先用循环清理一下键盘缓冲区。
luoxiao_std01 2002-03-15
  • 打赏
  • 举报
回复
按照键的扫描码先定义出来喽!
cssnow 2002-03-15
  • 打赏
  • 举报
回复
HOME,ENTER,SPACE...全部先按照ascii自己定义好!
luoxiao_std01 2002-03-15
  • 打赏
  • 举报
回复
以下是我以前做过的一个,去掉了一些内容,希望对你有帮助!

UINT iLineIn(void)
{
iCurn=0;
while(1)
{
ch=_bios_keybrd(_KEYBRD_READ);
chDig=ch&0x00ff;
switch(ch)
{
case HOME:
if(iCurn!=0)
iCurn=0;
break;
case END:
if(iCurn<iCharMax-1)
for(i=0;i<iCharMax;i++)
{
{
iCurn=i;
break;
}
}
break;
case LEFT:
if(iCurn>0)
iCurn=iCurn-1;
break;
case DEL:
if(iCurn>=0||iCurn<=iCharMax-1)
for(i=iCurn;i<iCharMax;i++)
;

break;
case BACKSPACE:
if(iCurn>=1)
{
iCurn-=1;
for(i=iCurn;i<iLineMax;i++);
}
break;

case RIGHT:
break;
case SPACE:
break;
default:
if(chDig>=33&&chDig<=126)
{
if(iCurn<iCharMax)
{
if(Buff[iCurn]=='\0')
Buff[iCurn+1]='\0';
else
{;
}
break;
}
if(ch==ENTER)
break;
}
}

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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