0

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

#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;
}

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

编辑:我尝试了手动标准输入刷新(使用while(getch()!='\n');),它与“输入”键一起使用。仍在尝试找出如何解决“s”键的问题。此外,更正了一些小错误。

4

0 回答 0