在C中使用枚举的一些好例子是什么

时间:2018-10-31 22:06:45

标签: c enums

我写了这个简单的代码来测试枚举,但是感觉不像是现实世界中可以使用的任何东西。我想知道枚举的一些很好的示例用例,以及它为什么有用的原因。

#include <stdio.h>

typedef enum {
    BLUE,
    GREEN,
    BROWN
} eye_color;

typedef struct {
    char *name;
    char *eyecolor;
    int height;
    int weight;
    eye_color eyes;
} person;

void print_eye_color(person p)
{
    switch(p.eyes) {
        case BLUE :
            // I didn't know what else to say... 
            printf("%s eyes are made from diamonds\n", p.eyecolor);
            break;
        case GREEN : 
            printf("%s eyes are made from emeralds\n", p.eyecolor);
            break;
        case BROWN : 
            printf("%s eyes are made from amber\n", p.eyecolor);
        default :
            printf("What colour eyes do you have?\n");
    }
}

int main()
{
    person ayla = {"Ayla", "Blue", 167, 42, BLUE};
    print_eye_color(ayla);
    return 0;
}

2 个答案:

答案 0 :(得分:2)

如果我想写纸牌游戏,我将使用一个枚举来表示纸牌的颜色,值和类型。

所以我会有类似的东西:

typedef enum {
    KING, QUEEN, ACE, JACK, TEN, NINE, EIGHT, SEVEN, SIX, FIVE, FOUR, THREE, TWO
} card_value;

typedef enum {
    SPADE, HEART, DIAMOND, CLUB
} card_type;

typedef enum {
    BLACK, RED
} card_color;

这与这样做相反:

const int CARD_COLOR_RED = 1;

或更糟

const char* CARD_COLOR_RED = "Red";

枚举是自我记录-我不需要知道枚举RED代表什么值,我只需要知道它是RED

这也减少了编写代码的时间(程序员效率),因为您不必考虑分配给常量的值,因为事实证明,您给它的名称就是您希望它包含的值第一名。

枚举类似于erlang中的原子。

答案 1 :(得分:2)

枚举通过为数字赋予标识和名称来帮助避免“幻数”。您可以省略该数字,编译器将自动生成一个序列,但是您也可以自己为每个名称分配值。

示例:

typedef enum {
    red = 0xff0000,
    green = 0x00ff00,
    blue = 0x0000ff,
    magenta = 0xff00ff,
    yellow = 0xffff00,
    cyan = 0x00ffff,
    white = 0xffffff,
    black = 0x000000
} colors_24bit;

枚举有很多用例,但它们的最终目的是帮助您使代码清晰易懂。