C基础-枚举类型-1-定义,赋值,使用

枚举类型

概念: 可以使用枚举类型,声明代表整数常量的符号名称。通过使用关键字enum,可以创建一个新“类型”并制定她可以具有的值。枚举类型的目的是提高程序的可读性。

enum 常量是int类型的,因此在使用int类型的任何地方都可以使用它。

定义:

/*

这个声明设置spectrum为标记名。

*/

enum spectrum

{

​		red,

​		orange,

​		yellow,

​		green,

​		blue

};

/*

这个声明,使得color成为enum spectrum类型的一个变量。

*/

enum spectrum color;

使用:

  1. enum 常量。

    上例中,red, orange等等 是枚举常量。

    在使用整数常量的任何地方都能使用枚举常量。例如,在数组声明中可以把它们作为数组大小,在switch语句中,可用它们来作为标签。

  2. enum 变量

    color 是枚举变量, 相当于整数型变量(int c)。

    color 的可能值是red, orange, yellow, 等等。

    color = blue;

    if (yellow == color)

    …;

    for(color = red; color <= blue;blue++)

    …;

    虽然枚举常量(如red和blue)是int类型,但是枚举变量可以是任意整数类型,前提是该整数类型可以储存枚举常量。例如,spectrum的枚举符范围是0~5,所以编译器可以用unsigned char来表示color变量。
    顺带一提,C枚举的一些特性并不适用于C++。例如,C允许枚举变量使用++运算符,但是C++标准不允许。所以,如果编写的代码将来会并入C++程序,那么必须把上面例子中的color声明为int类型,才能C和C++都兼容。

  3. 默认值
    默认情况下,枚举列表中的常量都被赋予0、1、2等。

  4. 指定值

    在枚举声明中,可以为枚举常量指定整数值:
    enum levels {low = 100, medium = 500, high = 2000};
    如果只给一个枚举常量赋值,没有对后面的枚举常量赋值,那么后面的常量会被赋予后续的值。

    例程:

    /*
    输入不同的颜色名称,输出关于这个颜色一条句子。
    */

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

   #define LEN 30

   enum spectrum
   {
   	red,
   	orange,
   	yellow,
   	green,
   	blue
   };


   const char * colors[] = {"red","orange","yellow","green","blue"};

   int main(void)
   {
   	char choice[LEN];
   	enum spectrum color;
   	bool color_is_find = false;
   	

   	puts("Enter a color (empty line to quit): ");
   	while(NULL != gets(choice) && '\0' != choice[0]) //当有效输入的时候,进入while执行。
   	{
   		
   		for(color=red;color<=blue;color++)
   		{
   			if(0 == strcmp(choice, colors[color]))
   			{
   				color_is_find = true;
   				break;
   			}
   		}
   		
   		if(color_is_find)
   		{
   			switch(color)
   			{
   				case red:
   					puts("Apple is red.");
   				break;
   				case orange:
   					puts("Oranges are orange.");
   				break;
   				case yellow:
   					puts("Bananas are yellow.");
   				break;
   				case green:
   					puts("The leaves are green.");
   				break;
   				case blue:
   					puts("Sky is blue.");
   				break;
   				default:	
   				break;
   			}
   		}
   		else
   		{
   			puts("Sorry i don't recognize this color.");			
   		}
   		color_is_find = false;
   		puts("Enter a color (empty line to quit);");
   	}
   	
   	puts("Bye.");
   	
   	return 0;

   }

   运行结果:
   Enter a color (empty line to quit): 
   red
   Apple is red.
   Enter a color (empty line to quit);
   yellow
   Bananas are yellow.
   Enter a color (empty line to quit);
   green
   The leaves are green.
   Enter a color (empty line to quit);
   orange
   Oranges are orange.
   Enter a color (empty line to quit);
   blue
   Sky is blue.
   Enter a color (empty line to quit);
   violet
   Sorry i don't recognize this color.
   Enter a color (empty line to quit);

   Bye.

版权声明:本文为happygrilclh原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。