我想将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'数据类型? 我无法打印出我输入的日期。
答案 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?