从输入中获取选择

时间:2015-12-11 16:20:13

标签: c windows input multiple-choice

我想提示用户按一个键。这个键将存储在一个变量中,并且在键上应用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;
}

3 个答案:

答案 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格式提供。只是搜索它。

如果您使用异步键状态,则必须将自己的检测应用于提升。