我想提示用户按一个键。这个键将存储在一个变量中,并且在键上应用switch
语句来执行相应的命令。我写了一段代码,看起来有点令人讨厌且效率低下,因为它以令人筋疲力尽的方式调用函数GetAsyncKeyState
,特别是如果键太多了。那有更简单的方法吗?
#include <stdio.h>
#include <Windows.h>
int GetChoice(int *keys,size_t size);
int main(void)
{
int keys[] = {'A','B','F'};
int cKey = GetChoice(keys,3);
switch(cKey)
{
case 'A':
puts("you pressed : A!");
break;
case 'B':
puts("you pressed : B!");
break;
case 'F':
puts("you pressed : F!");
break;
}
Sleep(2000);
return 0;
}
int GetChoice(int *keys,size_t size)
{
size_t n;
while(1)
{
for(n = 0 ; n < size ; n++)
{
if(GetAsyncKeyState(keys[n]))
return keys[n];
}
}
return 0;
}
答案 0 :(得分:1)
你需要改变
using namespace std;
到
int cKey = GetChoice(keys,3);
你不需要
char cKey;
cKey=getch();
功能。也可以删除它。您的整个代码应该看起来像
int GetChoice(int *keys,size_t size)
答案 1 :(得分:0)
你正在搅拌苹果和橘子。如果使用# For backwards compatability
from project.topic1.module1 import AwesomeClass
输出消息,则应该使用puts()
读取标准输入的输入。如果使用Windows API在屏幕上显示信息,则只能使用getchar()
读取键盘状态。在C中这样做已经很久以前已经过时了。祝你好运!
答案 2 :(得分:0)
如果您尝试使用C编程,请使用C构造,而不是Windows构造。看看K&amp; R(Kernighan和Ritchie)第1.5节。 K&amp; R以PDF格式提供。只是搜索它。
如果您使用异步键状态,则必须将自己的检测应用于提升。