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
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
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
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
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
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 中最大記憶體空間的欄位,並以此空間配置記憶體,
供全部欄位⼀起共用