typedef枚举到typedefstruct

时间:2016-11-30 00:57:33

标签: c enums

我想将typedef枚举日期保存到typedef struct data。

我的代码是

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 个答案:

答案 0 :(得分: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?