學(xué)習(xí)啦>學(xué)習(xí)英語>專業(yè)英語>計(jì)算機(jī)英語>

c語言枚舉的用法

時(shí)間: 長思709 分享
  在程序中,可能需要為某些整數(shù)定義一個(gè)別名,我們可以利用預(yù)處理指令#define來完成這項(xiàng)工作,您的代碼可能是:
  #defineMON1
  #defineTUE 2
  #defineWED3
  #defineTHU 4
  #defineFRI 5
  #defineSAT 6
  #defineSUN 7
  在此,我們定義一種新的數(shù)據(jù)類型,希望它能完成同樣的工作。這種新的數(shù)據(jù)類型叫枚舉型。下面小編就為大家介紹下c語言枚舉的用法。
        c語言枚舉的用法如下:
  1. 定義一種新的數(shù)據(jù)類型 - 枚舉型
  以下代碼定義了這種新的數(shù)據(jù)類型 - 枚舉型
  enumDAY
  {
  MON=1,TUE,WED,THU,FRI,SAT,SUN
  };
  (1) 枚舉型是一個(gè)集合,集合中的元素(枚舉成員)是一些命名的整型常量,元素之間用逗號(hào),隔開。
  (2) DAY是一個(gè)標(biāo)識(shí)符,可以看成這個(gè)集合的名字,是一個(gè)可選項(xiàng),即是可有可無的項(xiàng)。
  (3) 第一個(gè)枚舉成員的默認(rèn)值為整型的0,后續(xù)枚舉成員的值在前一個(gè)成員上加1。
  (4) 可以人為設(shè)定枚舉成員的值,從而自定義某個(gè)范圍內(nèi)的整數(shù)。
  (5) 枚舉型是預(yù)處理指令#define的替代。
  (6) 類型定義以分號(hào);結(jié)束。
  2. 使用枚舉類型對(duì)變量進(jìn)行聲明
  新的數(shù)據(jù)類型定義完成后,它就可以使用了。我們已經(jīng)見過最基本的數(shù)據(jù)類型,如:整型int, 單精度浮點(diǎn)型float, 雙精度浮點(diǎn)型double, 字符型char, 短整型short等等。用這些基本數(shù)據(jù)類型聲明變量通常是這樣:
  char a;//變量a的類型均為字符型char
  char letter;
  int x,
  y,
  z;//變量x,y和z的類型均為整型int
  int number;
  double m,n;
  double result;//變量result的類型為雙精度浮點(diǎn)型double
  既然枚舉也是一種數(shù)據(jù)類型,那么它和基本數(shù)據(jù)類型一樣也可以對(duì)變量進(jìn)行聲明。
  方法一:枚舉類型的定義和變量的聲明分開
  enumDAY
  {
  MON=1,TUE,WED,THU,FRI,SAT,SUN
  };
  enumDAYyesterday;
  enumDAYtoday;
  enumDAYtomorrow;//變量tomorrow的類型為枚舉型enumDAY
  enumDAYgood_day,bad_day;//變量good_day和bad_day的類型均為枚舉型enumDAY
  方法二:類型定義與變量聲明同時(shí)進(jìn)行:
  enum//跟第一個(gè)定義不同的是,此處的標(biāo)號(hào)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;//定義枚舉類型并聲明了兩個(gè)枚舉型變量
  方法三:用typedef關(guān)鍵字將枚舉類型定義成別名,并利用該別名進(jìn)行變量聲明:
  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
  注意:同一個(gè)程序中不能定義同名的枚舉類型,不同的枚舉類型中也不能存在同名的命名常量。錯(cuò)誤示例如下所示:
  錯(cuò)誤聲明一:存在同名的枚舉類型
  typedefenum
  {
  wednesday,
  thursday,
  friday
  }workday;
  typedefenumWEEK
  {
  saturday,
  sunday=0,
  monday,
  }workday;
  錯(cuò)誤聲明二:存在同名的枚舉成員
  typedefenum
  {
  wednesday,
  thursday,
  friday
  }workday_1;
  typedefenumWEEK
  {
  wednesday,
  sunday=0,
  monday,
  }workday_2;
  3. 使用枚舉類型的變量
  3.1 對(duì)枚舉型的變量賦值。
  實(shí)例將枚舉類型的賦值與基本數(shù)據(jù)類型的賦值進(jìn)行了對(duì)比:
  方法一:先聲明變量,再對(duì)變量賦值
  #include<stdio.h>
  /*定義枚舉類型*/
  enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN};
  voidmain()
  {
  /*使用基本數(shù)據(jù)類型聲明變量,然后對(duì)變量賦值*/
  intx,y,z;
  x=10;
  y=20;
  z=30;
  /*使用枚舉類型聲明變量,再對(duì)枚舉型變量賦值*/
  enumDAYyesterday,today,tomorrow;
  yesterday=MON;
  today=TUE;
  tomorrow=WED;
  printf("%d%d%d\n",yesterday,today,tomorrow);
  }
  方法二:聲明變量的同時(shí)賦初值
  #include <stdio.h>
  /*定義枚舉類型*/
  enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN};
  voidmain()
  {
  /*使用基本數(shù)據(jù)類型聲明變量同時(shí)對(duì)變量賦初值*/
  intx=10,y=20,z=30;
  /*使用枚舉類型聲明變量同時(shí)對(duì)枚舉型變量賦初值*/
  enumDAYyesterday=MON,
  today=TUE,
  tomorrow=WED;
  printf("%d%d%d\n",yesterday,today,tomorrow);
  }
  方法三:定義類型的同時(shí)聲明變量,然后對(duì)變量賦值。
  #include<stdio.h>
  /*定義枚舉類型,同時(shí)聲明該類型的三個(gè)變量,它們都為全局變量*/
  enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN}yesterday,today,tomorrow;
  /*定義三個(gè)具有基本數(shù)據(jù)類型的變量,它們都為全局變量*/
  intx,y,z;
  voidmain()
  {
  /*對(duì)基本數(shù)據(jù)類型的變量賦值*/
  x=10;y=20;z=30;
  /*對(duì)枚舉型的變量賦值*/
  yesterday=MON;
  today=TUE;
  tomorrow=WED;
  printf("%d%d%d\n",x,y,z);//輸出:102030
  printf("%d%d%d\n",yesterday,today,tomorrow);//輸出:123
  }
  方法四:類型定義,變量聲明,賦初值同時(shí)進(jìn)行。
  #include<stdio.h>
  /*定義枚舉類型,同時(shí)聲明該類型的三個(gè)變量,并賦初值。它們都為全局變量*/
  enumDAY
  {
  MON=1,
  TUE,
  WED,
  THU,
  FRI,
  SAT,
  SUN
  }
  yesterday=MON,today=TUE,tomorrow=WED;
  /*定義三個(gè)具有基本數(shù)據(jù)類型的變量,并賦初值。它們都為全局變量*/
  intx=10,y=20,z=30;
  voidmain()
  {
  printf("%d%d%d\n",x,y,z);//輸出:102030
  printf("%d%d%d\n",yesterday,today,tomorrow);//輸出:123
  }
  3.2 對(duì)枚舉型的變量賦整數(shù)值時(shí),需要進(jìn)行類型轉(zhuǎn)換。
  #include<stdio.h>
  enumDAY{MON=1,TUE,WED,THU,FRI,SAT,SUN};
  voidmain()
  {
  enumDAYyesterday,today,tomorrow;
  yesterday=TUE;
  today=(enumDAY)(yesterday+1);//類型轉(zhuǎn)換
  tomorrow=(enumDAY)30;//類型轉(zhuǎn)換
  //tomorrow=3;//錯(cuò)誤
  printf("%d%d%d\n",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]!='\0';index++)
  if(SPACE!=str[index])
  count_of_letter++;
  else
  {
  match_flag=(enumBOOLEAN)1;
  count_of_space++;
  }
  printf("%s%dtimes%c",match_flag"match":"notmatch",count_of_space,NEWLINE);
  printf("countofletters:%d%c%c",count_of_letter,NEWLINE,RETURN);
  }
  輸出:
  match 2 times
  count of letters: 10
  Press any key to continue
  4.枚舉類型與sizeof運(yùn)算符
  #include <stdio.h>
  enumescapes
  {
  BELL='\a',
  BACKSPACE='\b',
  HTAB='\t',
  RETURN='\r',
  NEWLINE='\n',
  VTAB='\v',
  SPACE=''
  };
  enumBOOLEAN{FALSE=0,TRUE}match_flag;
  voidmain()
  {
  printf("%dbytes\n",sizeof(enumescapes));//4bytes
  printf("%dbytes\n",sizeof(escapes));//4bytes
  printf("%dbytes\n",sizeof(enumBOOLEAN));//4bytes
  printf("%dbytes\n",sizeof(BOOLEAN));//4bytes
  printf("%dbytes\n",sizeof(match_flag));//4bytes
  printf("%dbytes\n",sizeof(SPACE));//4bytes
  printf("%dbytes\n",sizeof(NEWLINE));//4bytes
  printf("%dbytes\n",sizeof(FALSE));//4bytes
  printf("%dbytes\n",sizeof(0));//4bytes
  }
  5.綜合舉例
  #include<stdio.h>
  enumSeason
  {
  spring,summer=100,fall=96,winter
  };
  typedefenum
  {
  Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
  }
  Weekday;
  voidmain()
  {
  /*Season*/
  printf("%d\n",spring);//0
  printf("%d,%c\n",summer,summer);//100,d
  printf("%d\n",fall+winter);//193
  SeasonmySeason=winter;
  if(winter==mySeason)
  printf("mySeasoniswinter\n");//mySeasoniswinter
  intx=100;
  if(x==summer)
  printf("xisequaltosummer\n");//xisequaltosummer
  printf("%dbytes\n",sizeof(spring));//4bytes
  /*Weekday*/
  printf("sizeofWeekdayis:%d\n",sizeof(Weekday));//sizeofWeekdayis:4
  Weekdaytoday=Saturday;
  Weekdaytomorrow;
  if(today==Monday)
  tomorrow=Tuesday;
  else
  tomorrow=(Weekday)(today+1);//remembertoconvertfrominttoWeekday
  }
515228