2016-11-30 64 views
-1

我想保存typedef枚舉日期typedef結構數據。typedef枚舉typedefstruct

我的代碼是

typedef enum weather { 
    clear = 1, 
    cloudy, 
    cold, 
    rainy, 
    stormy 
}Weather; 



typedef struct diary { 
    time_t date; 
    Weather weather; 
    char contents[MAX]; 
}Diary; 

void save(FILE *pFile, Diary*da) { 

    fprintf(pFile, " %s %s \n",da->date,da->contents); 
} 


void in(Diary*da) { 
    int _weather; 

    puts("Enter the current date(YYYY-MM-DD) : "); 
    scanf("%s", &da->date); 
    getchar(); 

    puts("Enter the current weather, (1) Clear (2) Cloudy (3) Cold (4) Rainy (5) Stormy : "); 
    scanf("%d", &_weather); 
    getchar(); 

    puts("Enter the contents"); 
    scanf("%79s", da->contents); 
    getchar(); 

} 

我不知道怎麼改字(晴天,多雲,冷..)數量和輸出文件打印出來。

什麼是'time_t'數據類型? 我無法打印輸入的日期。

+1

「如何改變字的數量」。 '開關(_天氣)'?這是一個基本的方法。更聰明的方法是創建一個字符串數組,其索引是從輸入數字派生的(即查找表)。 – kaylum

+0

你的C書中描述了你所有的問題。目前尚不清楚你的具體**問題是什麼。閱讀[問]並按照建議。並且以下劃線開頭的名稱保留用於實現。不要使用它們。 – Olaf

+0

並嘗試搜索(它是免費的)。 [如何以特定格式打印time_t?](http://stackoverflow.com/questions/18422384/how-to-print-time-t-in-a-specific-format) – kaylum

回答

2

Kaylum下您的文章的評論中提到這一點,這是正在提出什麼:

const char* const WEATHER_STRINGS[5] = { "Clear", "Cloudy", "Cold", "Rainy", "Stormy" }; 

const char* getWeatherName(int weatherIdx) 
{ 
    return WEATHER_STRINGS[weatherIdx]; 
} 

然後,你可以這樣調用該函數:

getWeatherName(&da->weather) 

將返回字匹配枚舉的整數值。

我的c可能有點生鏽,但這個想法是合理的,只是驗證我的語法。 =)

這個想法是你創建一個數組來作爲你的字符串/值的查找。然後你可以使用你的枚舉作爲索引從數組中拉出匹配的單詞。你不需要這個函數,如果你願意,你可以直接從數組中取出,但是用一個函數封裝它會使它更具可讀性,如果你以後需要更多的功能,你可以隨時擴展它。

至於time_t,你可以看看以前回答問題,以進一步瞭解它:How to print time_t in a specific format?