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

  • 相关阅读:
    深度学习之视频人脸识别系列二:人脸检测与对齐
    终极指南:构建用于检测汽车损坏的Mask R-CNN模型(附Python演练)
    数据挖掘和机器学习的面试问题
    SVM多核学习方法简介
    RookeyFrame 线上 添加Model
    RookeyFrame Bug 线上创建的DLL被删除了 模块无法删除 临时解决
    RookeyFrame Bug 编号显示 系统自动生成 的问题,有时候依旧会显示text文本框
    C# 跨域 请求带cookie
    RookeyFrame 隐藏 首次加载菜单 的伸缩动画
    RookeyFrame 加载 自定义JS
  • 原文地址:https://www.cnblogs.com/qkhhxkj/p/2093867.html
Copyright © 2011-2022 走看看