2016-11-30 66 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?