结构体里包含共用体实例--输入输出数据
程序员文章站
2022-05-12 11:29:55
...
结构体里面包含共用体,能很好的解决输出的时候有两种情况的难题,有详细注释,不过多赘述。
题目:打印如图所示的表格:
当某人为的职业为学生‘s’时,score/course项要为score;当某人为的职业为教师‘t’时,score/course项要为course。
代码:
//<<<<<<<<结构体里包含共用体实例--输入输出数据>>>>>>>>>
//wsg
//时间:2017年8月15日
//运用联合体中只能有一个成员有效
#include <stdio.h>
#define TOTEL 4 //定义了输入多少个人的数据,这里为4个人
struct //定义结构体
{
char name[20]; //姓名
int num; //编号
char sex; //性别
char profession; //职业
union //定义联合体
{
float score; //学生的成绩
char course[20]; //教室所教课程
}sc;
}body[TOTEL]; //结构体数组
int main(void)
{
int i;
for(i=0; i<TOTEL; i++) //使用for循环,一个一个输入,循环输入四个人的数据
{
printf("Please input Name Num Sex(f or m) Profession(s or t):\n");
//对应输入的是:某一个人的姓名,编号,性别,职业(以空格隔开)
scanf("%s %d %c %c", body[i].name, &body[i].num, &body[i].sex, &body[i].profession);
//当输入的职业(profession)为's'的时候, 就输入学生的成绩,而不是教师所教的课程
if(body[i].profession == 's')
{
scanf("%f", &body[i].sc.score);
}
//相反,当输入的职业为't'的时候,就输入教师所教的课程,而不是学生的成绩
else if(body[i].profession == 't')
{
scanf("%s", body[i].sc.course);
}
//如果职业既不是's'也不是't',那就是输入错误
else
{
printf("EROOR!\n");
break;
}
}
//同样,根据职业的不同,分别判断打印
printf("\n输出结果为:\n");
printf("Name\t Num\t Sex\t Profession\t Score/Course\n");
for(i=0; i<TOTEL; i++)
{
printf("%s\t %d\t %c\t %c\t\t ",
body[i].name, body[i].num, body[i].sex, body[i].profession);
if(body[i].profession == 's')
{
printf("%.1f\n", body[i].sc.score);
}
else if(body[i].profession == 't')
{
printf("%s\n", body[i].sc.course);
}
else
{
break;
}
}
return 0;
}
示意图: