参考代码
#include<stdio.h>
struct {
int num;
char name[10];
char sex;
char job;
union {
int class1;//class是关键字
char position[10];
}category;
}stu_tch[100];
int main() {
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++) {
scanf("%d %s %c %c", &stu_tch[i].num, stu_tch[i].name, &stu_tch[i].sex, &stu_tch[i].job);
if(stu_tch[i].job == 's') {
scanf("%d", &stu_tch[i].category.class1);
} else if(stu_tch[i].job == 't') {
scanf("%s", stu_tch[i].category.position);
}
}
for(int i = 0; i < n; i++) {
//若为学生
if(stu_tch[i].job == 's') {
printf("%d %s %c %c %d\n", stu_tch[i].num, stu_tch[i].name, stu_tch[i].sex, stu_tch[i].job, stu_tch[i].category.class1);
} else if(stu_tch[i].job == 't') {
printf("%d %s %c %c %s\n", stu_tch[i].num, stu_tch[i].name, stu_tch[i].sex, stu_tch[i].job, stu_tch[i].category.position);
}
}
return 0;
}
共用体相关知识
-
定义格式:
union 共用体名{ 成员列表 };
-
结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
-
结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。