我正在用 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”键的问题。此外,更正了一些小错误。