zoukankan      html  css  js  c++  java
  • 枚举类型

    9 枚举类型

      枚举类型是  ANSI C  新标准所增加的。

      如果一个变量只有几种可能的值,可以定义为枚举类型,所谓的枚举是批将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。

      声明一个枚举类型用 enum 开头例如:

      enum weekday{sun, mon, tue, wed, thu, fri, sat};

      声明了一个枚举类型 enum weekday,可以用此类型来定义如:

      enum weekday workday, week_end;

      workday 和 week_end 被定义为枚举变量,它们的值只能是 sun 到 sat 之一。例如:

      workday = mon;

      week_end = sun;

    是正确的。

      当然也可以直接定义枚举变量如:

      enum{sun, mon, tue, wed, thu, fri,sat}workday, week_end;

    其中 sun, mon, ... , sat  等称为枚举元素或枚举常量,它们是用户定义的标识符。这些标识符并不自动地代表什么含义,

    说明:

      (1)在C编译中,对枚举元素按常量处理,故称枚举常量,它们不是变量,不能对它们赋值,例如:

      sun = 0; mon = 1;

    是错误的。

      (2)枚举元素作为常量,它们是有值的,C语言编译按定义时的顺序使它们的值为 0, 1, 2 ...

      在上面定义中,sun 值为 0  mon 的值为 1,.... sat 的值为 6 如果有赋值语句:

      workday = mon;

    workday  变量的值为 1 。这个整数是可以输出的。如:

      printf("%d", workday);

    将输出整数 1。

      也可以改变枚举元素的值,在定义时由程序员指定,如:

      enum weekday{sun=7,mon=1,tue, wed, thu,fri, sat} workday, week_end;

    定义 sun 为 7 ,mon = 1 ,以后顺序加 1 ,sat 为 6。

      (3)枚举值可以用来做判断比较如:

      if(workday == mon).....

      if(workday > sun)....

      枚举值的比较规则是按其在定义时的顺序号比较的,如果定义时未指定,则第一个枚举值默认为 0 。故 mon 大于 sun, sat > fri。

      (4)一个整数不能直接赋值给一个枚举变量。如:

      workday = 2;

    是不正确的,它们属于不同的类型。应先进行强制类型转换才能赋值。如:

      workday = (enum weekday)2;

    它相当于将顺序号为 2  的枚举元素赋给 workday,相当于

      workday = true;

    甚至可以是表达式。如:

      workday = (enum weekday)(5-3);

    如下例子程序:

    #include <stdio.h>
    #include <stdlib.h>

    void main()
    {
     enum color {red, yellow, blue, white, black};
     int i, j, k, pri;

     int n, loop;
     n = 0;
     for(i=red; i<black; i++)
      for(j=red; j<black; j++)
       if(i != j)
       {
        for(k=red; k<black; k++)
         if((k != i) && (k != j))
         {
          n++;
          printf("%-4d", n);
          for(loop=1;loop<=3;loop++)
          {
           switch(loop)
           {
           case 1: pri = i;break;
           case 2: pri = j;break;
           case 3: pri = k;break;
           default: break;
           }
           switch(pri)
           {
           case red: printf("%-10s", "red"); break;
           case yellow: printf("%-10s", "yellow"); break;
           case blue: printf("%-10s", "blue"); break;
           case white: printf("%-10s", "white"); break;
           case black: printf("%-10s", "black"); break;
           default: break;
           }
          }
          printf("\n");
         }
       }
     printf("\n total: %5d\n", n);
     system("pause");
    }

    运行结果

    3   red       blue      yellow
    4   red       blue      white
    5   red       white     yellow
    6   red       white     blue
    7   yellow    red       blue
    8   yellow    red       white
    9   yellow    blue      red
    10  yellow    blue      white
    11  yellow    white     red
    12  yellow    white     blue
    13  blue      red       yellow
    14  blue      red       white
    15  blue      yellow    red
    16  blue      yellow    white
    17  blue      white     red
    18  blue      white     yellow
    19  white     red       yellow
    20  white     red       blue
    21  white     yellow    red
    22  white     yellow    blue
    23  white     blue      red
    24  white     blue      yellow

  • 相关阅读:
    设置vim查找高亮
    设置vim显示行号
    虚拟机安装VMware tools
    硬链接和软链接
    Ubuntu用户首次设置root用户的密码
    Ubuntu无法远程连接
    线上教育课堂如何解决H5视频点播转码出现的黑屏问题?
    “音视频+”时代到来,HLS(m3u8)/HTTP-FLV/RTSP流媒体RTMP推流服务器EasyDSS应用场景优化
    搭建一套完整的网络视频流媒体直播/点播服务系统需要具备哪些条件?
    关于网络视频流媒体直播/点播服务流程,你要知道的全在这里了!(新手必看)
  • 原文地址:https://www.cnblogs.com/qkhhxkj/p/2093867.html
Copyright © 2011-2022 走看看