商務英語計算機英語

c語言枚舉的用法

本文已影響 8.17K人 
ing-bottom: 75%;">c語言枚舉的用法
在程序中,可能需要爲某些整數定義一個別名,我們可以利用預處理指令#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]!='