在使用getch()之前如何清理输入缓冲区?

时间:2014-04-17 09:51:32

标签: c++ getch winbgi

所以,我正在使用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窗口,这将解决问题。 希望得到一些建议,谢谢。

2 个答案:

答案 0 :(得分:3)

使用FlushConsoleInputBuffer

FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));

答案 1 :(得分:0)

正在跳过getch()来自用户按前一次输入的enter调用,而getch正在获取char,函数fflush(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;
}