0

(不,不是硬件问题)

我在标准 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()同样,如有必要,我可以添加我的功能。但是问题仍然存在,我怎样才能继续输入按住键的输入?

4

0 回答 0