例11.12
设有若干个人员的数据,其中有学生和教师。学生的数据中包括:姓名、图11.25号码、性别、职业、班级。教师的数据包括:姓名、号码、性别、职业、职务。可以看出,学生和教师所包含的数据是不同的。现要求把它们放在同一表格中,见图11.25。如果“job”项为“s”(学生),则第5项为class(班)。即Li是501班的。如果“job”项是“t”(教师),则第5项为position(职务)。Wang是prof(教授)。显然对第5项可以用共用体来处理(将calss和position放在同一段内存中)。
要求输入人员的数据,然后再输出。可以写出下面的算法(见图11.26)。按此写出程序。为简化起见。只设两个人(一个学生、一个教师)。   
struct
{int num;
char name[10];
char sex;
char job;
union
{int class;
char position[10];
}category;
}person[2];
  main()
{int n,i;
for(i=0,i<2;i++)
{scanf("%d %s %c %c",&person[i].num,person[i].name,&person[i].sex,&person[i].job);
if(person[i].job=='s') scanf("%d",&person[i].category.class);
else if (person[i].job=='t') scanf("%s",person[i].category.position);
else printf("input error!");
}
 printf("\n");
printf("No,Namesex job class/position\n");
for(i=0;i<2;i++)
{if(person[i].job=='s')
printf("%\|6d %\|10s %\|3c %\|3c %\|6d\n",person[i].num,person[i].name,person[i].sex,person[i].job,person[i].category.class);
else
printf("%\|6d %\|10s %\|3c %\|3c %\|6s\n",person[i].num,person[i].name,person[i].sex,person[i].job,person[i].category.position);
}
}
运行情况如下:
101 Li f s 501
102 Wang m t professor
No.Namesexjobclass/position
101 Li fs  501
102 Wang mtprofessor
可以看到:在main函数之前定义了外部的结构体数组person,在结构体类型声明中包括了共用体类型,category(分类)是结构体中一个成员名,在这个共用体中成员为calss和position,前者为整型,后者为字符数组(存放“职务”的值——字符串)。