標籤:style color 使用 strong os 資料
假設一個變數你須要幾種可能存在的值,那麼就能夠被定義成為枚舉類型。之所以叫枚舉就是說將變數或者叫對象可能存在的情況也能夠說是可能的值一一例舉出來。
舉個範例來說明一吧,為了讓大家更明確一點,比方一個鉛筆盒中有一支筆,但在沒有開啟之前你並不知道它是什麼筆,可能是鉛筆也可能是鋼筆,這裡有兩種可能,那麼你就能夠定義一個枚舉類型來表示它!
enum box{pencil,pen};//這裡你就定義了一個枚舉類型的變數叫box,這個枚舉變數內含有兩個元素也稱枚舉元素在這裡是pencil和pen,分別表示鉛筆和鋼筆。
這裡要說一下,假設你想定義兩個具有相同特性枚舉類型的變數那麼你能夠用例如以下的兩種方式進行定義!
enum box{pencil,pen};
enum box box2;//或者簡寫成box box2;
再有一種就是在聲明的時候同一時候定義。
enum {pencil,pen}box,box2; //在聲明的同一時候進行定義!
枚舉變數中的枚舉元素系統是依照常量來處理的,故叫枚舉常量,他們是不能進行普通的算術賦值的,(pencil=1;)這種寫發是錯誤的,可是你能夠在聲明的時候進行賦值操作!
enum box{pencil=1,pen=2};
可是這裡要特別注意的一點是,假設你不進行元素賦值操作那麼元素將會被系統自己主動從0開始自己主動遞增的進行賦值操作,說到自己主動賦值,假設你僅僅定義了第一個那麼系統將對下一個元素進行前一個元素的值加1操作,比如
enum box{pencil=3,pen};//這裡pen就是4系統將自己主動進行pen=4的定義賦值操作!
前面說了那麼多,以下給出一個完整的範例大家能夠通過以下的代碼的學習進行更完整的學習!
#include <iostream>
using namespace std;
void main(void)
{
enum egg {a,b,c};
enum egg test; //在這裡你能夠簡寫成egg test;
test = c; //對枚舉變數test進行賦予元素操作,這裡之所以叫賦元素操作不叫賦值操作就是為了讓大家明確枚舉變數是不能直接賦予算數值的,比如(test=1;)這種操作都是不被編譯器所接受的,正確的方式是先進行強制類型轉換比如(test = (enum egg) 0;)!
if (test==c)
{
cout <<"枚舉變數推斷:test枚舉相應的枚舉元素是c" << endl;
}
if (test==2)
{
cout <<"枚舉變數推斷:test枚舉元素的值是2" << endl;
}
cout << a << "|" << b << "|" << test <<endl;
test = (enum egg) 0; //強制類型轉換
cout << "枚舉變數test值改變為:" << test <<endl;
cin.get();
}
看到這裡要最後說一個問題,就是枚舉變數中的枚舉元素(或者叫枚舉常量)在特殊情況下是會被自己主動提升為算術類型的!
#include <iostream>
using namespace std;
void main(void)
{
enum test {a,b};
int c=1+b; //自己主動提升為算術類型
cout << c <<endl;
cin.get();
}
枚舉類型
在實際問題中,有些變數的取值被限定在一個有限的範圍內。比如,一個星期內僅僅有七天,一年僅僅有十二個月,一個班每周有六門課程等等。假設把這些量 說明為整型,字元型或其他類型顯然是不妥當的。為此,C語言提供了一種稱為“枚舉”的類型。在“枚舉”類型的定義中列舉出全部可能的取值,被說明為該“枚 舉”類型的變數取值不能超過定義的範圍。應該說明的是,枚舉類型是一種基礎資料型別 (Elementary Data Type),而不是一種構造類型,由於它不能再分解為不論什麼基本類型。
11.10.1 枚舉類型的定義和枚舉變數的說明
1. 枚舉的定義枚舉類型定義的一般形式為:
enum 枚舉名{ 枚舉值表 };
在枚舉值表中應羅列出全部可用值。這些值也稱為枚舉元素。
比如:
該枚舉名為weekday,枚舉值共同擁有7個,即一周中的七天。凡被說明為weekday類型變數的取值僅僅能是七天中的某一天。
2. 枚舉變數的說明
如同結構和聯合一樣,枚舉變數也可用不同的方式說明,即先定義後說明,同一時候定義說明或直接說明。
設有變數a,b,c被說明為上述的weekday,可採用下述任一種方式:
enum weekday{ sun,mou,tue,wed,thu,fri,sat };
enum weekday a,b,c;
或者為:
enum weekday{ sun,mou,tue,wed,thu,fri,sat }a,b,c;
或者為:
enum { sun,mou,tue,wed,thu,fri,sat }a,b,c;
11.10.2 枚舉類型變數的賦值和使用
枚舉類型在使用中有下面規定:
1. 枚舉值是常量,不是變數。不能在程式中用賦值語句再對它賦值。
比如對枚舉weekday的元素再作下面賦值:
sun=5;
mon=2;
sun=mon;
都是錯誤的。
2. 枚舉元素本身由系統定義了一個表示序號的數值,從0開始順序定義為0,1,2…。如在weekday中,sun值為0,mon值為1,…,sat值為6。
【例11.10】
main(){
enum weekday
{ sun,mon,tue,wed,thu,fri,sat } a,b,c;
a=sun;
b=mon;
c=tue;
printf("%d,%d,%d",a,b,c);
}
說明:
僅僅能把枚舉值賦予枚舉變數,不能把元素的數值直接賦予枚舉變數。如:
a=sum;
b=mon;
是正確的。而:
a=0;
b=1;
是錯誤的。如一定要把數值賦予枚舉變數,則必須用強制類型轉換。
如:
a=(enum weekday)2;
其意義是將順序號為2的枚舉元素賦予枚舉變數a,相當於:
a=tue;
還應該說明的是枚舉元素不是字元常量也不是字串常量,使用時不要加單、雙引號。
【例11.11】
main(){
enum body
{ a,b,c,d } month[31],j;
int i;
j=a;
for(i=1;i<=30;i++){
month[i]=j;
j++;
if (j>d) j=a;
}
for(i=1;i<=30;i++){
switch(month[i])
{
case a:printf(" %2d %c/t",i,‘a‘); break;
case b:printf(" %2d %c/t",i,‘b‘); break;
case c:printf(" %2d %c/t",i,‘c‘); break;
case d:printf(" %2d %c/t",i,‘d‘); break;
default:break;
}
}
printf("/n");
}