5. Make
each
day
count
? 常見的列舉定義
enum boolean {FLASE, TRUE};
enum number {ZERO, ONE, TWO, THREE, FOUR, FIVE};
enum number {CLUB, DIAMOND, HEART, SPADE};
enum direction {EAST, WEST, SOUTH, NORTH};
enum month {Jan = 1, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec};
列舉資料型別enum 4/6
5
6. Make
each
day
count
#include <stdio.h>
#include <stdlib.h>
enum months{Jan = 1, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec};
void test_enum(){
int month = -1, day = 0;
printf("輸入今天日期(mm/dd):");
scanf("%d/%d", &month, &day);
switch(month){
case Jan:
printf("%d月 ?是新的?年", Jan);
break;
case Feb:
printf("?洋情?節在%d月", Feb);
break;
case Mar:
printf("%d月 春暖花開的季節", Mar);
break;
case Apr:
printf("%d月 清明節祭祀祖先慎終追遠", Apr);
break;
列舉資料型別enum 5/6
6
7. Make
each
day
count
case May:
printf("%d月 第?個星期日為?親節", May);
break;
case Jun:
printf("%d月 期末考到了", Jun);
break;
case Jul:
case Aug:
printf("7,8月放暑假囉");
break;
case Sep:
case Oct:
case Nov:
printf("9, 10, 11月秋高氣爽");
break;
case Dec:
printf("%d月來臨,聖誕節快到了", Dec);
break;
default:
printf("資料錯誤n");
}
}
列舉資料型別enum 6/6
7
9. Make
each
day
count
? union 是由 struct 結構衍生出來的資料型別
? union 用來定義聯合資料,語法如下:
union 聯合名稱 {
資料型別 欄位名稱1,
資料型別 欄位名稱2,
...
};
? 例如:
union student {
char name[10];
char subject[10];
float percentage;
};
? 定義完成聯合資料型別,即可用來宣告聯合變數,例如:
union student s1;
聯合資料型別union 2/7
9
10. Make
each
day
count
? 也可在定義聯合資料型別時?併宣告聯合變數
union 聯合名稱 {
資料型別 欄位名稱1,
資料型別 欄位名稱2,
...
}聯合變數1, 聯合變數2;
? 例如:
union student {
char name[10];
char subject[10];
float percentage;
} s1, s2;
? 要存取聯合變數欄位資料時,?樣使用「?」點運算子,例如:
s1.percentage = 85.0;
聯合資料型別union 3/7
10
11. Make
each
day
count
struct sdata {
char name[10];
char subject[10];
float percentage;
};
union sdata {
char name[10];
char subject[10];
float percentage;
};
聯合資料型別union 4/7
11
name
subject
percentage
10bytes
m
10bytes
4bytes
m+10
m+20
10bytes
m
name subject
percentage
4bytes
? struct 結構中的每個欄位都會配置各自獨立的記憶體空間,但 union
中的各欄位則是共同擁有記憶體空間。當宣告?個 union 變數時,編
譯器會找出 union 中最大記憶體空間的欄位,並以此空間配置記憶體,
供全部欄位?起共用