C语言枚举 enum

枚举是 C 语言中的一种基本数据类型, 它主要用在穷举 有限数据的 数据类型!

例如:

  • 检举男女

枚举语法:

enum 枚举名称 {元素1,元素2,……};

示例: 枚举春夏秋冬

enum season {SPRING, SUMMAR, AUTUMN, WINTER};

注意:

第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推。

当前我们也可以指定其数值:

enum Season {
  SPRING = 1,  // 春天
  SUMMAR = 2,  // 夏天
  AUTUMN = 3,  // 秋天
  WINTER = 4   // 冬天
};
enum Season {
  SPRING = 1,  // 春天
  SUMMAR = 2,  // 夏天
  AUTUMN,  // 秋天
  WINTER = 4   // 冬天
};

C 枚举变量的定义

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <setjmp.h>
#include <stdarg.h>

enum Season {
  SPRING = 1,  // 春天
  SUMMAR = 2,  // 夏天
  AUTUMN,  // 秋天
  WINTER = 4   // 冬天
};

int main(int argc, char *argv[] )
{
    enum Season season = AUTUMN;
    printf("%d", season);

    return 0;
}

运行结果为

3

从上面我们可以看到,枚举的数组为前一个加1;

C 遍历枚举

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <setjmp.h>
#include <stdarg.h>


enum Season {
  SPRING = 1,  // 春天
  SUMMAR = 2,  // 夏天
  AUTUMN,  // 秋天
  WINTER = 4   // 冬天
};

int main(int argc, char *argv[] )
{
    enum Season first = SPRING;
    enum Season end = WINTER;

    enum Season season;
    for(season = first; season <= end; season ++)
    {
        printf("枚举元素 : %d \n", season);
    }

    return 0;
}

运行结果为

枚举元素 : 1
枚举元素 : 2
枚举元素 : 3
枚举元素 : 4

注意: 不连续的检举是无法遍历的, 如以下是无法遍历的

enum Season {
  SPRING = 1,  // 春天
  SUMMAR = 5,  // 夏天
  AUTUMN,  // 秋天
  WINTER = 10   // 冬天
};

因为这种不连续,在遍历出来的数字是不对应的! 切记!

C 枚举在switch 使用

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <setjmp.h>
#include <stdarg.h>

enum Season {
  SPRING = 1,  // 春天
  SUMMAR = 10,  // 夏天
  AUTUMN,  // 秋天
  WINTER = 4   // 冬天
};

int main(int argc, char *argv[] )
{
    enum Season season = SPRING;

    switch(season)
    {
        case SPRING:
        {
            printf("当前是春天!");
            break;
        }
            case SUMMAR:
        {
            printf("当前是夏天!");
            break;
        }
            case AUTUMN:
        {
            printf("当前是秋天!");
            break;
        }
            case WINTER:
        {
            printf("当前是冬天!");
            break;
        }
            default:
        {
            printf("没有找到对应的值,则默认为是春天!");
            break;
        }
    }
    return 0;
}

运行结果为

当前是春天!

C 将整数转化为枚举

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <setjmp.h>
#include <stdarg.h>

enum Season {
  SPRING = 1,  // 春天
  SUMMAR = 10,  // 夏天
  AUTUMN,  // 秋天
  WINTER = 4   // 冬天
};

int main(int argc, char *argv[] )
{
    enum Season season = (enum Season)1;
    printf("value = %d \n", season);
    return 0;
}

运行结果为

value = 1