如何通过 C 中的关联数字访问枚举中的元素?

How do I access the an element in an enumeration by the associated number in C?

我在 C 中有一个枚举如下:

enum menu
{
    PASTA,
    PIZZA,
    DIET_COKE,
    MOJITO,
};

由于我没有明确提到这些元素对应的整数值,所以分别给它们赋值0、1、2、3。

假设我决定向我的枚举中添加另外 100 个左右的项目。 那么有没有办法通过它们关联的数字来访问这些元素呢? (比如我们如何使用数组的索引访问数组元素)

枚举只是 C 中的命名常量。与您使用

声明常量相同
#define PASTA 0
#define PIZZA 1
#define DIET_COKE 2
#define MOJITO 3

例如。

使用枚举,编译器会自动为您完成。因此,除非您为枚举创建一个数组,否则无法在 C 中以您想要的方式访问枚举。

示例更新

一个示例用例,展示如何实现一个字符串列表,并伴随枚举作为索引:

#include <stdio.h>

char *stringsOfMenu[] = {
    "Pasta",
    "Pizza",
    "Diet Coke",
    "Mojito"
};

enum menuIndex {
    PASTA,
    PIZZA,
    DIET_COKE,
    MOJITO
};

int main(void) {
    
    // For example you show menu on the screen first
    puts("Please select");
    puts("-------------");
    for(int i = 0; i <= MOJITO; i++) {
        printf("[%d] - %s\n", i+1, stringsOfMenu[i]);
    }
    putchar('\n');
    printf("Make a choice: ");
    int choice = -1;
    scanf("%d", &choice);
    
    if(choice <= 0 || choice > MOJITO+1) {
        puts("Not a valid choice");
        return 1;
    }
    
    // Note that the choice will contain the counting number.
    // That's why we convert it to the index number.
    printf("Your choice %s is in progress, thank you for your patience!\n", stringsOfMenu[choice-1]);
    return 0;
}

这是一个输出演示:


Please select
-------------
[1] - Pasta
[2] - Pizza
[3] - Diet Coke
[4] - Mojito

Make a choice: 2
Your choice Pizza is in progress, thank you for your patience!