2

所以,我正在使用 GetAsyncKeyState() 来查看何时按下某个键。但是,在使用它之后,我需要使用 getch()。但似乎 getch() 得到了 GetAsyncKeyState() 之前得到的任何东西。那是我的简化代码的版本:

#include <graphics.h>

int main()
{
    initwindow(100, 100);

    while(true)
    {        
        if (GetAsyncKeyState(VK_RETURN))    //wait for user to press "Enter"
            break;
        //do other stuff
    }

    getch();    //this is just skipped

    return 0;
}

我想我需要在使用 getch() 之前清理输入缓冲区。但是怎么做?PS:GetAsyncKeyState() 对我来说是必须使用的,我还没有找到任何替代 getch() 的方法,它可以与 BGI 窗口一起使用并且可以解决问题。希望给点建议,谢谢。

4

2 回答 2

3

利用FlushConsoleInputBuffer

FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
于 2014-04-17T10:05:49.143 回答
0

由于用户按下了先前的输入,它正在跳过getch()调用,并且正在获取我们刷新输入流的函数。这样就会从输入流中读取新的输入。entergetchcharfflush(stdin)getch()

#include <graphics.h>

int main()
{
    initwindow(100, 100);

    while(true)
    {        
        if (GetAsyncKeyState(VK_RETURN))    //wait for user to press "Enter"
            break;
        //do other stuff
    }
    fflush(stdin);
    getch();    //this is just skipped

    return 0;
}
于 2014-04-17T09:57:35.403 回答