在C中定義了一種特殊的數據類型:枚舉。但這並不是C的首創,之前Pascal有,C之后的Java也有,但是C的枚舉類型並不是那么的好用。今天在看視頻的時候,翁愷老師正好在講枚舉,也就在此總結一下。
枚舉的好處在於它可以使一些數字符號化,然后增強程序的可讀性。當然const double pi=3.14這種方法也可以達到這樣的效果,但如果很多數字都需要這樣的處理,那么枚舉就很方便了。
enum 枚舉類型的名字{name0,name1…namen}
這就是枚舉的格式 ,注意枚舉中的那些name之類的符號並不是真正意義上的符號,而是整形。如name0到namen,就是0-n-1.(當然我們也可以單獨賦特定的值),所以輸出和輸入枚舉類型的時候都需要按照整形來處理。
如:
#include <stdio.h> enum COLOR{red,green,blue}; int main() { enum COLOR color; scanf("%d",&color); printf("%d",color); //輸入和輸出仍然是整形數據,不能輸入字符串。。。 return 0; }
#include <stdio.h> enum COLOR{red,green,blue}; void fun(enum COLOR color) { printf("%d",color); } int main() { enum COLOR color=red; fun(color); return 0; }
永遠記住C語言中枚舉仍然是按照整形變量來處理的,自然包括輸入和輸出。
同時枚舉類型中可以有一個自動計數的小套路,當我們沒有給name0-namen賦值的時候,它的值是0-n-1。所以我們可以用一個無意義叫做Nums的東西放到枚舉變量中的最后,用來統計這個枚舉變量中一共有多少個量(當然是指有意義的)。
如:
enum COLOR{red,green,blue,Nums};
通過這種方式,也可以運用到for循環等語句結構中。
但我們需要小心的是,如果直接賦一個整形的數據給枚舉變量,現在的編譯器是不會報錯的。但這樣的后果也就會導致我們可能得到了一個沒有實際意義的結果。因為枚舉本身就是為了方便閱讀程序。
#include <stdio.h> enum COLOR{red=1,green,blue}; void fun(enum COLOR color) { printf("%d\n",color); } int main() { enum COLOR color=red; enum COLOR color2=0; fun(color); fun(color2); return 0; }
如,這里0在COLOR中並沒有意義,但是還是會輸出一個0。