C - GetKeyState()与getch()冲突;

时间:2012-06-25 11:02:44

标签: c windows input getch

我正在用C写一个小程序。 我需要处理一些虚拟键(箭头键,return和esc)的状态加上'S'键,所以我选择了GetKeyState。问题是我不能使用getch()来提示“按任意键”消息,因为GetKeyState / GetAsyncKeyState会将stray字符放入stdin中。 这是一个代码示例:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
enum key{KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_ESC, KEY_RETURN, KEY_S, KEY_NULL};

enum key getInput()
{
    enum key key_pressed=KEY_NULL;

    while(key_pressed==KEY_NULL)
    {
        if(GetKeyState(VK_UP) & 0x8000) key_pressed=KEY_UP;
        if(GetKeyState(VK_DOWN) & 0x8000 ) key_pressed=KEY_DOWN;
        if(GetKeyState(VK_LEFT) & 0x8000) key_pressed=KEY_LEFT;
        if(GetKeyState(VK_RIGHT) & 0x8000) key_pressed=KEY_RIGHT;
        if(GetKeyState(VK_ESCAPE) & 0x8000) key_pressed=KEY_ESC;
        if(GetKeyState(VK_RETURN) & 0x8000) key_pressed=KEY_RETURN;
        if(GetKeyState('S') & 0x8000) key_pressed=KEY_S;
    }
    Sleep(150);
    return key_pressed;
}

int main()
{
    printf("Press a virtual key\n");
    getInput();
    printf("Virtual key pressed. Press Any key to exit.\n");
    getch();    //at this point, the program should wait for a user input.
    return 0;
}

当程序从返回KEY_RETURN或KEY_S的getInput()函数退出时,下一个getch()被绕过,程序直接结束。在getInput()函数中或在getch()之前放置更长的睡眠时间。当我必须输入一个字符串并且程序已经在输入缓冲区中放入's','esc'或'enter'时,它会变得烦人。我该如何解决这个问题? 提前谢谢。

编辑:我尝试过手动stdin flush(使用while(getch()!='\n');)并使用'enter'键。还在试图弄清楚如何为's'键解决这个问题。 此外,纠正了小错误。

0 个答案:

没有答案