【问题标题】:Getting choice from input从输入中获取选择
【发布时间】:2015-12-11 16:20:12
【问题描述】:

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

【问题讨论】:

    标签: c windows input multiple-choice


    【解决方案1】:

    你只需要改变

    int cKey = GetChoice(keys,3);
    

    char cKey;
    cKey=getch();
    

    你不需要

    int GetChoice(int *keys,size_t size) 
    

    功能。只需将其删除即可。你的整个代码应该是这样的

    #include <stdio.h>
    #include<conio.h>
    int main(void)
    {
    
        char cKey;
        cKey=getch();
        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;
    }
    

    【讨论】:

      【解决方案2】:

      您正在混合苹果和橙子。如果您使用puts() 输出消息,您可能应该使用getchar() 从标准输入读取输入。仅当您使用 Windows API 在屏幕上显示信息时,使用GetAsyncKeyState() 读取键盘状态才是一致的。很久以前,在 C 中这样做已经过时了。祝你好运!

      【讨论】:

      • getchar 显示输入的密钥,我的代码中的puts 用于示例。
      • @machine_1 那么问题出在哪里?
      【解决方案3】:

      如果您尝试使用 C 进行编程,请使用 C 结构,而不是 Windows 结构。查看 K&R(Kernighan 和 Ritchie)第 1.5 节。 K&R 以 PDF 格式提供。只需搜索即可。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-23
        • 2015-10-05
        • 2021-06-29
        • 2015-10-19
        • 2021-10-29
        • 2018-02-07
        • 1970-01-01
        相关资源
        最近更新 更多