(不,不是硬件问题)
我在标准 C 中对 kbhit() 进行了如下编码(从这里获得;另一个函数“setTerm()”设置(非)规范模式):
#include <sys/ioctl.h>
int kbhit()
{
int bytesWaiting;
ioctl(STDIN_FILENO,FIONREAD,&bytesWaiting);
return bytesWaiting;
}
我随后在一个程序中实现了 kbhit(),该程序读取键盘输入并将其打印到屏幕上。当一个键('A'呢?)被按住时,它会被重复打印。但是,当按住“A”的同时按下第二个键(例如,“B”)时,会打印“B”并且不再出现“A”。我的意图是继续打印“A”,但事实并非如此。这是一些显示问题的代码(用于箭头键或 AD;按 Enter 或 '\n' 结束):
#include <stdio.h>
#include "kbhit.h" //just replace this line with previous code example
int main()
{
setTerm(0);//turns terminal to noncanonical mode; if necessary I can include the function
int test=1;
int c=0;
while(test)
{
if(kbhit())
{
c = getchar();
switch(c)
{
case 'A':
case 'B':
case 'C':
case 'D':
printf("%c\n",c);
break;
case '[':
printf("%c",c);
break;
case 27:
printf("ESC");
break;
case '\n':
test=0;
break;
}
}
}
setTerm(1);//restores terminal to canonical mode
}
setTerm()
同样,如有必要,我可以添加我的功能。但是问题仍然存在,我怎样才能继续输入按住键的输入?