我在使用使用 getch() 的函数重复密钥检查时遇到问题。
这是一个代码示例:
static char g_keybuffer[256];
_Bool IsKeyDown(char c)
{
char ch;
if(kbhit())
ch = getch();
if(ch == -32 || ch == 224)
{
ch = getch();
}
g_keybuffer[ch] = 1;
if(g_keybuffer[c] == 1)
{
g_keybuffer[c] = 0;
return 1;
}
return 0;
}
/*
*
*/
int main(int argc, char** argv) {
while(1)
{
if(IsKeyDown('a'))
{
printf("Test\n");
}
if(IsKeyDown('a'))
{
printf("Hello\n");
}
else if(IsKeyDown('b'))
{
printf("World\n");
}
Sleep(100);
}
return (EXIT_SUCCESS);
}
我知道为什么会出现问题。当一个键被按下时,kbhit 每个循环一次为真,并将 ch 设置为从缓冲区中检索到的字符。使用 IsKeyDown 时,如果等于参数,则将缓冲区 g_keybuffer 中的键设置为零,以避免键无限“向下”。这样做的问题是,如果您想检查同一个键是否多次关闭,则只会运行 IsKeyDown 的第一个实例,其余的无效,因为键的 g_keybuffer 现在为 0。
有谁知道我如何更改 IsKeyDown 以使其能够在每次循环中多次检查相同的键?我被困住了。