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가 루프마다 한 번 true가되고 ch를 버퍼에서 검색 한 문자로 설정합니다. IsKeyDown이 사용되면 매개 변수와 같으면 버퍼 g_keybuffer의 키가 0으로 설정되어 키가 무한히 "다운"되는 것을 방지합니다. 이 문제는 동일한 키가 두 번 이상 있는지 확인하려는 경우 IsKeyDown의 첫 번째 인스턴스 만 실행되고 키의 g_keybuffer가 0이되어 나머지는 유효하지 않습니다.누구든지 IsKeyDown 루핑 당 동일한 키를 여러 번 검사 할 수있는 능력을 줄 수있는 방법을 알고 있습니까? 나는 붙어있다.
당신은'cin.ignore()'을 시도 했습니까? – theharshest
나는 당신의 코드를 너무 자세히 보지 않았지만,'kbhit'가 false를 반환 할 때'ch'가 초기화되지 않았다는 것을 알아야한다. 그게 당신의 기능을 엉망이 될 것입니다 – tay10r
@theharshest 이것은'C++ '가 아닙니다 – tay10r