補充:C語言列舉型別

Icer_Newer發表於2023-05-19

1.列舉型別

1.列舉資料型別是C語言中一種構造資料型別,可以讓資料更加簡潔,更易讀,對於只有幾個特定的資料,可以使用列舉型別
2.列舉對應英文enumeration,簡寫為enum
3.列舉是一組常量的集合,包含一組有限的特定的資料
4.列舉語法的定義格式為

enum 列舉名 {列舉元素}

1.1 例項1

使用列舉表示一個星期

// 傳統方法
#define MON 1;
#define TUE 2;
#define WeD 3;
#define THU 4;
#define FRI 5;
#define SAT 6;
#define SUN 7;
#include <stdio.h>
void main() {

	enum DAY
	{
                // 這裡DAY 就是列舉型別, 包含了7個列舉元素 
                // 沒有賦值,就按照順序給值 0 1 2 3 4 ...
                // 列舉型別預設是從0開始的  
                // 給初始值之後會從初始值遞增
		MON=1, TUE=2, WED=3, THU=4, FRI=5, SAT=6, SUN=7
	}; 
	enum DAY day; // enum DAY  是列舉型別, day 就是列舉變數 
	day = WED; //給列舉變數  day 賦值,值就是某個列舉元素
	printf("%d",day);// 3 , 每個列舉元素對應一個值
	getchar();
}

1.2 列舉型別宣告

如同結構體(struct)和共用體(union)一樣,列舉變數也可用不同的方式說明,即先定義後說明,同時定義說明或直接說明。設有變數a,b,c被說明為上述的weekday,可採用下述任一種方式:

enum weekday{sun,mon,tue,wed,thu,fri,sat};	//定義列舉型別
enum weekday a,b,c;                             //定義3個列舉型別的變數
enum weekday{sun,mon,tue,wed,thu,fri,sat}a,b,c;	//定義列舉型別的同時,定義3個變數
enum{sun,mon,tue,wed,thu,fri,sat}a,b,c;		//列舉名可省略,但後面不能再定義新的列舉變數

1.3 列舉型別取別名

// typeof可以把列舉型別定義一個別名
typedef enum weekday		//此處的weekday為列舉名
{
	Mon = 0,
	Tues,
	Wed,
	Thurs,
	Fri,
	Sat,
	Sun
} weekday;				//此處的weekday為enum weekday的別名

weekday today, tomorrow;		//列舉型別的變數,即enum weekday型別
// 列舉名可以省略
typedef enum 	//省略列舉名
{
	Mon = 0,
	Tues,
	Wed,
	Thurs,
	Fri,
	Sat,
	Sun
}weekday;				//此處的weekday為列舉型別的別名

weekday today, tomorrow;		//列舉型別的變數,即enum weekday型別

// typeof使用的時候不可以省略別名
typedef enum 	//省略列舉名
{
	Mon = 0,
	Tues,
	Wed,
	Thurs,
	Fri,
	Sat,
	Sun
}weekday;				//此處的weekday為列舉型別的別名

weekday today, tomorrow;		//列舉型別的變數,即enum weekday型別

  • 不能定義同名的列舉型別
  • 不能包含同名的列舉成員

1.3 列舉型別的遍歷

C 語言中,列舉型別是被當做 int 或者 unsigned int 型別來處理的, 枚 舉型別必須連續是可以實現有條件的遍歷。以下例項使用 for 來遍歷列舉的元素。

#include <stdio.h>

enum DAY {
      MON=1, TUE, WED, THU, FRI, SAT, SUN //如果沒有給賦值,就會按照順序賦值
} day; // 表示 定義了一個列舉型別 enum Day ,同時定義了一個變數 day(型別是 enum DAY)


int main() {
	
	// 遍歷列舉元素, 列舉的每個元素都對應數值
	//day++ 會給出警告,但是可以執行
	for (day = MON; day <= SUN; day++) { //SUN = 7
		printf("列舉元素:%d \n", day); // 1, 2, 3, 4,5,6,7
	}
	//day = FRI;
	//printf("%d", day); // 10
	getchar();
	return 0;

}

1.4 列舉型別在switch中的應用

#include <stdio.h>

void  main() { 
    enum SEASONS {SPRING=1, SUMMER, AUTUMN, WINTER}; //定義列舉型別  enum SEASONS   
    enum SEASONS season;//定義了一個列舉型別變數 season(型別 enum SEASONS )
    printf("請輸入你喜歡的季節: (1. spring, 2. summer, 3. autumn 4 winter): ");
    scanf("%d", &season);
    switch (season) {
    case SPRING:
        printf("你喜歡的季節是春天");
        break;
    case SUMMER:
        printf("你喜歡的季節是夏天");
        break;
    case AUTUMN:
        printf("你喜歡的季節是秋天");
        break;
    case WINTER:
        printf("你喜歡的季節是冬天");
        break;
    default:
        printf("你沒有選擇你喜歡的季節");
    }
    getchar();
    getchar();
  
}

相關文章