0
我遇到了使用函數getch()重複鍵檢查的問題。用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以使其能夠在每次循環中多次檢查相同的密鑰?我卡住了。
你嘗試'cin.ignore()'? – theharshest
我沒有仔細查看你的代碼,但是你應該認識到當'kbhit'返回false時'ch'是未初始化的。這將弄亂你的功能 – tay10r
@theharshest這不是'C++' – tay10r