C 語言初學教材 - 第六章 記錄通訊錄資料的結構

記錄帳號與密碼由於都是字串,所以可以簡單用兩個字串陣列來記錄。通訊錄資料卻可能有不同型態的資料,例如年齡,當然是用整數 int 型態比較不佔記憶體空間囉!



我們預備用下的結構 friendData 來記錄通訊錄資料
struct friendData {
    char name[NAME_SIZE];
    int age;
    int sex;
    int relation;
};


字元型態的陣列成員 name ,作為記錄好友姓名或暱稱,我們另外須定義指定陣列大小的整數常數 NAME_SIZE 。其他三個成員都是整數型態, age 記錄好友的年齡, sex 是性別, relation 則是關係,性別跟關係也都用整數型態來記錄,這是種方便的格式,因為我們會以
printf("好友性別 - 0.女 1.男: ");
scanf("%d", &fage);
printf("好友關係 - 0.家人 1.同學 2.朋友: ");
scanf("%d", &frealtion);


直接提示使用者輸入數字選擇性別及關係,另外,需要印出性別及關係的資料時,我們也會以
printf("%s", someone.sex ? "男" : "女");
printf("%s", someone.relation ? "同學或朋友" : "家人");


利用條件運算式選擇輸出字串。


以下,我們用個直接在程式中設定的簡單程式,示範利用結構 friendData
#include <stdio.h>
#include <string.h>

#define NAME_SIZE 20

struct friendData {
    char name[NAME_SIZE];
    int age;
    int sex;
    int relation;
};

typedef struct friendData FriendData;

int main(void)
{
    FriendData someone;
    
    strcpy(someone.name, "tommy");
    someone.age = 30;
    someone.sex = 1;
    someone.relation = 2;
    
    printf("\n好友資料如下\n");
    printf("暱稱: %s\n", someone.name);
    printf("年紀: %d\n", someone.age);
    printf("性別: %s\n", someone.sex ? "男" : "女");
    printf("關係: %s\n", someone.relation ? "同學或朋友" : "家人");
    printf("\n");
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:friendtest.c
    功能:測試結構 friendData  
    作者:張凱慶
    時間:西元2010年7月 */


編譯後執行,如下



問題與討論
  1. 利用整數記錄性別跟關係好不好?試討論其優劣。
  2. 為什麼不把結構 friendData 直接放入之前發展的程式當中,個別測試有什麼優點或缺點?




沒有留言: