我正在用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'键解决这个问题。
此外,纠正了小错误。