2016-11-30 19 views
-1

typedef列挙型の日付をtypedef構造体データに保存します。typedef enum to 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'データ型とは何ですか? 入力した日付を印刷できません。

getWeatherName(&da->weather) 

ワードマッチングを返します。

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

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

は、その後、あなたがこのような関数を呼び出すことができます。

+1

「言葉に番号を変更する方法を」。 'switch(_weather)'?それは基本的な方法です。よりスマートな方法は、入力番号から導かれたインデックス(すなわちルックアップテーブル)を持つ文字列の配列を持つことです。 – kaylum

+0

すべてのご質問はC本に記載されています。あなたの**具体的な**問題が何であるかははっきりしていません。 [ask]を読んで助言に従ってください。アンダースコアで始まる名前は実装のために予約されています。それらを使用しないでください。 – Olaf

+0

検索してみてください(無料です)。 [特定の形式でtime_tを出力するには?](http://stackoverflow.com/questions/18422384/how-to-print-time-t-in-a-specific-format) – kaylum

答えて

2

Kaylumがあなたの記事の下のコメントでこれを言及し、これは推奨されていたものですenumの整数値

私のCは少し錆びるかもしれませんが、アイデアは健全です。私の構文を確認してください。 =)

考え方は、文字列/値の参照として使用する配列を作成することです。その後、列挙型をインデックスとして使用して、一致する単語を配列から取り出すことができます。関数を必要としない場合は、必要に応じて配列から直接引き出すことができますが、関数でカプセル化すると読みやすくなり、後でさらに機能が必要な場合はいつでも展開できます。 time_tについては

、以前それに関するより多くの情報のための質問に答えを見てとることができます。How to print time_t in a specific format?