c語言枚舉的用法
本文已影響
8.17K人
在程序中,可能需要爲某些整數定義一個別名,我們可以利用預處理指令#define來完成這項工作,您的代碼可能是: #defineMON1 #defineTUE 2 #defineWED3 #defineTHU 4 #defineFRI 5 #defineSAT 6 #defineSUN 7 在此,我們定義一種新的數據類型,希望它能完成同樣的工作。這種新的數據類型叫枚舉型。下面小編就爲大家介紹下c語言枚舉的用法。
c語言枚舉的用法如下: 1. 定義一種新的數據類型 - 枚舉型 以下代碼定義了這種新的數據類型 - 枚舉型 enumDAY { MON=1,TUE,WED,THU,FRI,SAT,SUN }; (1) 枚舉型是一個集合,集合中的元素(枚舉成員)是一些命名的整型常量,元素之間用逗號,隔開。 (2) DAY是一個標識符,可以看成這個集合的名字,是一個可選項,即是可有可無的項。 (3) 第一個枚舉成員的默認值爲整型的0,後續枚舉成員的值在前一個成員上加1。 (4) 可以人爲設定枚舉成員的值,從而自定義某個範圍內的整數。 (5) 枚舉型是預處理指令#define的替代。 (6) 類型定義以分號;結束。 2. 使用枚舉類型對變量進行聲明 新的數據類型定義完成後,它就可以使用了。我們已經見過最基本的數據類型,如:整型int, 單精度浮點型float, 雙精度浮點型double, 字符型char, 短整型short等等。用這些基本數據類型聲明變量通常是這樣: char a;//變量a的類型均爲字符型char char letter; int x, y, z;//變量x,y和z的類型均爲整型int int number; double m,n; double result;//變量result的類型爲雙精度浮點型double 既然枚舉也是一種數據類型,那麼它和基本數據類型一樣也可以對變量進行聲明。 方法一:枚舉類型的定義和變量的聲明分開 enumDAY { MON=1,TUE,WED,THU,FRI,SAT,SUN }; enumDAYyesterday; enumDAYtoday; enumDAYtomorrow;//變量tomorrow的類型爲枚舉型enumDAY enumDAYgood_day,bad_day;//變量good_day和bad_day的類型均爲枚舉型enumDAY 方法二:類型定義與變量聲明同時進行: enum//跟第一個定義不同的是,此處的標號DAY省略,這是允許的。 { saturday, sunday=0, monday, tuesday, wednesday, thursday, friday }workday;//變量workday的類型爲枚舉型enumDAY enumweek{Mon=1,Tue,Wed,Thu,FriSat,Sun}days;//變量days的類型爲枚舉型enumweek enumBOOLEAN{false,true}end_flag,match_flag;//定義枚舉類型並聲明瞭兩個枚舉型變量 方法三:用typedef關鍵字將枚舉類型定義成別名,並利用該別名進行變量聲明: typedefenumworkday { saturday, sunday=0, monday, tuesday, wednesday, thursday, friday }workday;//此處的workday爲枚舉型enumworkday的別名 workdaytoday,tomorrow;//變量today和tomorrow的類型爲枚舉型workday,也即enumworkday enum workday中的workday可以省略: typedefenum { saturday, sunday=0, monday, tuesday, wednesday, thursday, friday }workday;//此處的workday爲枚舉型enumworkday的別名 workdaytoday,tomorrow;//變量today和tomorrow的類型爲枚舉型workday,也即enumworkday 也可以用這種方式: typedefenumworkday { saturday, sunday=0, monday, tuesday, wednesday, thursday, friday }; workdaytoday,tomorrow;//變量today和tomorrow的類型爲枚舉型workday,也即enumworkday 注意:同一個程序中不能定義同名的枚舉類型,不同的枚舉類型中也不能存在同名的命名常量。錯誤示例如下所示: 錯誤聲明一:存在同名的枚舉類型 typedefenum { wednesday, thursday, friday }workday; typedefenumWEEK { saturday, sunday=0, monday, }workday; 錯誤聲明二:存在同名的枚舉成員 typedefenum { wednesday, thursday, friday }workday_1; typedefenumWEEK { wednesday, sunday=0, monday, }workday_2; 3. 使用枚舉類型的變量 3.1 對枚舉型的變量賦值。 實例將枚舉類型的賦值與基本數據類型的賦值進行了對比: 方法一:先聲明變量,再對變量賦值 #include<stdio.h> /*定義枚舉類型*/ enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN}; voidmain() { /*使用基本數據類型聲明變量,然後對變量賦值*/ intx,y,z; x=10; y=20; z=30; /*使用枚舉類型聲明變量,再對枚舉型變量賦值*/ enumDAYyesterday,today,tomorrow; yesterday=MON; today=TUE; tomorrow=WED; printf("%d%d%dn",yesterday,today,tomorrow); } 方法二:聲明變量的同時賦初值 #include <stdio.h> /*定義枚舉類型*/ enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN}; voidmain() { /*使用基本數據類型聲明變量同時對變量賦初值*/ intx=10,y=20,z=30; /*使用枚舉類型聲明變量同時對枚舉型變量賦初值*/ enumDAYyesterday=MON, today=TUE, tomorrow=WED; printf("%d%d%dn",yesterday,today,tomorrow); } 方法三:定義類型的同時聲明變量,然後對變量賦值。 #include<stdio.h> /*定義枚舉類型,同時聲明該類型的三個變量,它們都爲全局變量*/ enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN}yesterday,today,tomorrow; /*定義三個具有基本數據類型的變量,它們都爲全局變量*/ intx,y,z; voidmain() { /*對基本數據類型的變量賦值*/ x=10;y=20;z=30; /*對枚舉型的變量賦值*/ yesterday=MON; today=TUE; tomorrow=WED; printf("%d%d%dn",x,y,z);//輸出:102030 printf("%d%d%dn",yesterday,today,tomorrow);//輸出:123 } 方法四:類型定義,變量聲明,賦初值同時進行。 #include<stdio.h> /*定義枚舉類型,同時聲明該類型的三個變量,並賦初值。它們都爲全局變量*/ enumDAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } yesterday=MON,today=TUE,tomorrow=WED; /*定義三個具有基本數據類型的變量,並賦初值。它們都爲全局變量*/ intx=10,y=20,z=30; voidmain() { printf("%d%d%dn",x,y,z);//輸出:102030 printf("%d%d%dn",yesterday,today,tomorrow);//輸出:123 } 3.2 對枚舉型的變量賦整數值時,需要進行類型轉換。 #include<stdio.h> enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN}; voidmain() { enumDAYyesterday,today,tomorrow; yesterday=TUE; today=(enumDAY)(yesterday+1);//類型轉換 tomorrow=(enumDAY)30;//類型轉換 //tomorrow=3;//錯誤 printf("%d%d%dn",yesterday,today,tomorrow);//輸出:2330 } 3.3 使用枚舉型變量 #include<stdio.h> enum { BELL='a', BACKSPACE='b', HTAB ='t', RETURN ='r', NEWLINE ='n', VTAB ='v', SPACE ='' }; enumBOOLEAN{FALSE=0,TRUE}match_flag; voidmain() { intindex=0; intcount_of_letter=0; intcount_of_space=0; charstr[]="I'mElyefod"; match_flag=FALSE; for(;str[index]!='
c語言枚舉的用法如下: 1. 定義一種新的數據類型 - 枚舉型 以下代碼定義了這種新的數據類型 - 枚舉型 enumDAY { MON=1,TUE,WED,THU,FRI,SAT,SUN }; (1) 枚舉型是一個集合,集合中的元素(枚舉成員)是一些命名的整型常量,元素之間用逗號,隔開。 (2) DAY是一個標識符,可以看成這個集合的名字,是一個可選項,即是可有可無的項。 (3) 第一個枚舉成員的默認值爲整型的0,後續枚舉成員的值在前一個成員上加1。 (4) 可以人爲設定枚舉成員的值,從而自定義某個範圍內的整數。 (5) 枚舉型是預處理指令#define的替代。 (6) 類型定義以分號;結束。 2. 使用枚舉類型對變量進行聲明 新的數據類型定義完成後,它就可以使用了。我們已經見過最基本的數據類型,如:整型int, 單精度浮點型float, 雙精度浮點型double, 字符型char, 短整型short等等。用這些基本數據類型聲明變量通常是這樣: char a;//變量a的類型均爲字符型char char letter; int x, y, z;//變量x,y和z的類型均爲整型int int number; double m,n; double result;//變量result的類型爲雙精度浮點型double 既然枚舉也是一種數據類型,那麼它和基本數據類型一樣也可以對變量進行聲明。 方法一:枚舉類型的定義和變量的聲明分開 enumDAY { MON=1,TUE,WED,THU,FRI,SAT,SUN }; enumDAYyesterday; enumDAYtoday; enumDAYtomorrow;//變量tomorrow的類型爲枚舉型enumDAY enumDAYgood_day,bad_day;//變量good_day和bad_day的類型均爲枚舉型enumDAY 方法二:類型定義與變量聲明同時進行: enum//跟第一個定義不同的是,此處的標號DAY省略,這是允許的。 { saturday, sunday=0, monday, tuesday, wednesday, thursday, friday }workday;//變量workday的類型爲枚舉型enumDAY enumweek{Mon=1,Tue,Wed,Thu,FriSat,Sun}days;//變量days的類型爲枚舉型enumweek enumBOOLEAN{false,true}end_flag,match_flag;//定義枚舉類型並聲明瞭兩個枚舉型變量 方法三:用typedef關鍵字將枚舉類型定義成別名,並利用該別名進行變量聲明: typedefenumworkday { saturday, sunday=0, monday, tuesday, wednesday, thursday, friday }workday;//此處的workday爲枚舉型enumworkday的別名 workdaytoday,tomorrow;//變量today和tomorrow的類型爲枚舉型workday,也即enumworkday enum workday中的workday可以省略: typedefenum { saturday, sunday=0, monday, tuesday, wednesday, thursday, friday }workday;//此處的workday爲枚舉型enumworkday的別名 workdaytoday,tomorrow;//變量today和tomorrow的類型爲枚舉型workday,也即enumworkday 也可以用這種方式: typedefenumworkday { saturday, sunday=0, monday, tuesday, wednesday, thursday, friday }; workdaytoday,tomorrow;//變量today和tomorrow的類型爲枚舉型workday,也即enumworkday 注意:同一個程序中不能定義同名的枚舉類型,不同的枚舉類型中也不能存在同名的命名常量。錯誤示例如下所示: 錯誤聲明一:存在同名的枚舉類型 typedefenum { wednesday, thursday, friday }workday; typedefenumWEEK { saturday, sunday=0, monday, }workday; 錯誤聲明二:存在同名的枚舉成員 typedefenum { wednesday, thursday, friday }workday_1; typedefenumWEEK { wednesday, sunday=0, monday, }workday_2; 3. 使用枚舉類型的變量 3.1 對枚舉型的變量賦值。 實例將枚舉類型的賦值與基本數據類型的賦值進行了對比: 方法一:先聲明變量,再對變量賦值 #include<stdio.h> /*定義枚舉類型*/ enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN}; voidmain() { /*使用基本數據類型聲明變量,然後對變量賦值*/ intx,y,z; x=10; y=20; z=30; /*使用枚舉類型聲明變量,再對枚舉型變量賦值*/ enumDAYyesterday,today,tomorrow; yesterday=MON; today=TUE; tomorrow=WED; printf("%d%d%dn",yesterday,today,tomorrow); } 方法二:聲明變量的同時賦初值 #include <stdio.h> /*定義枚舉類型*/ enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN}; voidmain() { /*使用基本數據類型聲明變量同時對變量賦初值*/ intx=10,y=20,z=30; /*使用枚舉類型聲明變量同時對枚舉型變量賦初值*/ enumDAYyesterday=MON, today=TUE, tomorrow=WED; printf("%d%d%dn",yesterday,today,tomorrow); } 方法三:定義類型的同時聲明變量,然後對變量賦值。 #include<stdio.h> /*定義枚舉類型,同時聲明該類型的三個變量,它們都爲全局變量*/ enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN}yesterday,today,tomorrow; /*定義三個具有基本數據類型的變量,它們都爲全局變量*/ intx,y,z; voidmain() { /*對基本數據類型的變量賦值*/ x=10;y=20;z=30; /*對枚舉型的變量賦值*/ yesterday=MON; today=TUE; tomorrow=WED; printf("%d%d%dn",x,y,z);//輸出:102030 printf("%d%d%dn",yesterday,today,tomorrow);//輸出:123 } 方法四:類型定義,變量聲明,賦初值同時進行。 #include<stdio.h> /*定義枚舉類型,同時聲明該類型的三個變量,並賦初值。它們都爲全局變量*/ enumDAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } yesterday=MON,today=TUE,tomorrow=WED; /*定義三個具有基本數據類型的變量,並賦初值。它們都爲全局變量*/ intx=10,y=20,z=30; voidmain() { printf("%d%d%dn",x,y,z);//輸出:102030 printf("%d%d%dn",yesterday,today,tomorrow);//輸出:123 } 3.2 對枚舉型的變量賦整數值時,需要進行類型轉換。 #include<stdio.h> enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN}; voidmain() { enumDAYyesterday,today,tomorrow; yesterday=TUE; today=(enumDAY)(yesterday+1);//類型轉換 tomorrow=(enumDAY)30;//類型轉換 //tomorrow=3;//錯誤 printf("%d%d%dn",yesterday,today,tomorrow);//輸出:2330 } 3.3 使用枚舉型變量 #include<stdio.h> enum { BELL='a', BACKSPACE='b', HTAB ='t', RETURN ='r', NEWLINE ='n', VTAB ='v', SPACE ='' }; enumBOOLEAN{FALSE=0,TRUE}match_flag; voidmain() { intindex=0; intcount_of_letter=0; intcount_of_space=0; charstr[]="I'mElyefod"; match_flag=FALSE; for(;str[index]!='