①每件作品都要标明著者、作品标题、作品诞生年份及其所属分类。
② Painting类要求显示画的宽和高等尺寸信息。
③ Music类要求显示能够代表其内容的关键信息,例如"D Major"。
④ Chamber类要求显示其中包括的演奏人员的数目。
#include<stdio.h>
enum art_class{
PAINTING,
MUSIC,
CHAMBER,
ART_CLASS_MAX
};
typedef struct art_s{
#define AUTHOR_STR_MAX (20)
#define TITLE_STR_MAX (20)
#define DATE_STR_MAX (50)
#define ARTICLE_DESC_STR_MAX (100)
char author[AUTHOR_STR_MAX];
char title[TITLE_STR_MAX];
char date[DATE_STR_MAX];
enum art_class class;
union{
struct{
int widgh;
int height;
}painting;
union{
struct{
char description[ARTICLE_DESC_STR_MAX];
}music;
struct{
char description[ARTICLE_DESC_STR_MAX];
int musicians_num;
}chamber;
}u;
};
}art_t;
#define get_painting_info(c) (c)->painting
#define get_music_info(c) (c)->u.music
#define get_chamber_info(c) (c)->u.chamber
int main()
{
art_t art[10];
char *author="夜雨*飘雪";
char *title="No.1";
char *date = "2021年11月3日";
char *description = "没谁了";
memcpy(art[0].author,author,strlen(author)+1);
memcpy(art[0].title,title,strlen(title)+1);
memcpy(art[0].date,date,strlen(date)+1);
art[0].class = CHAMBER;
memcpy(get_chamber_info(&art[0]).description,description,strlen(description)+1);
get_chamber_info(&art[0]).musicians_num=2;
printf("author is %s\n",art[0].author);
printf("title is %s\n",art[0].title);
printf("date is %s\n",art[0].date);
printf("class is %d\n",art[0].class);
printf("description is %s\n",get_chamber_info(&art[0]).description);
printf("musicians_num is %d\n",get_chamber_info(&art[0]).musicians_num);
return 0;
}