codeup|输入几个人员的数据,将其保存在以上包含共用体的结构体数组中,并输出。

该代码示例展示了如何使用C语言的共用体(union)来存储学生和教师的数据。结构体中定义了一个共用体,根据job字段('s'表示学生,'t'表示教师)来决定使用class字段存储班级(学生)还是position字段存储职务(教师)。程序首先读取人员数量,然后按格式读取每个人员的数据并存储到结构体数组中,最后按原格式输出所有数据。
摘要由CSDN通过智能技术生成

题目描述
设有若干个人员的数据,其中包含学生和教师。学生的数据中包括:号码、姓名、性别、职业、班级。教师的数据包括:号码、姓名、性别、职业、职务。可以看出,学生和教师所包含的数据是不同的。现在要求把这些数据放在同一个表格中储存,使用结构体中的共用体实现。结构体定义如下:
struct {
int num;
char name[10];
char sex;
char job;
union {
int class;
char position[10];
}category;
};
在以上的结构体中,如果job项为s(学生),则第5项为class(班级);如果job项是t(教师),则第5项为position(职务)。
输入几个人员的数据,将其保存在以上包含共用体的结构体数组中,并输出。

输入
第一行有一个整数n,表示以下n行分别表示n个人员的数据。保证n不超过100。
之后的n行,每行有5项用空格隔开的内容。前4项分别为人员的号码(整数)、姓名(长度不超过9的无空格字符串)、性别(字符,m或f)和职业(字符,s或t)。如果第4项是s,则第5项为一个整数,表示班级;如果第4项是t,则第5项为一个长度不超过9的无空格字符串,表示职务。

输出
共有n行,与输入格式相同,输出读入的所有内容。
请注意行尾输出换行。

样例输入 Copy
2
101 Li f s 501
102 Wang m t prof
样例输出 Copy
101 Li f s 501
102 Wang m t prof

知识点
union 叫共用体,又叫联合、联合体。“联合体”是一种特殊的类,也是一种构造类型的数据结构。在一个“联合体”内能够定义多种不同的数据类型。一个被说明为该“联合体”类型的变量中。同意装入该“联合体”所定义的不论什么一种数据。这些数据共享同一段内存,以达到节省空间的目的。

共用体和结构体不同点:1,同一时刻,共用体中只存放一个被选中的成员,结构体的所有成员都存在,

2,对共用体的不同成员赋值,将会对其他成员重写,原来的值就不存在了,结构体不影响

注意点
注意结构体的定义,题目给出的并不是完整定义,且class为关键字,需要对结构体中的变量名进行修改。

代码


#include<stdio.h>

struct Person {
    int num;
    char name[10];
    char sex;
    char job;
    union {
        int classnum;
        char position[10];
    } category;
};

int main() {
    Person person[100];
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; 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.classnum);
        if (person[i].job == 't') scanf("%s", &person[i].category.position);
    }
    for (int i = 0; i < n; i++) {
        if (person[i].job == 's')
            printf("%d %s %c %c %d\n", person[i].num, person[i].name, person[i].sex, person[i].job,
                   person[i].category.classnum);
        if (person[i].job == 't')
            printf("%d %s %c %c %s\n", person[i].num, person[i].name, person[i].sex, person[i].job,
                   person[i].category.position);
    }
    return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
共用体(Union)是一种特殊的数据类型,允许在同一内存位置存储不同的数据类型。结构体数组是指将多个结构体元素组织在一起形成的数组。要定义共用体定义结构体数组,可以按照以下步骤进行操作: 1. 首先声明共用体类型。共用体的声明方式与结构体类似,使用关键字union,后面跟上共用体的成员列表。例如:`union MyUnion { int num; char letter; };` 2. 然后定义结构体数组结构体数组的定义方式与普通数组类似,先写上结构体类型,再写上数组名。例如:`struct MyStructArray { union MyUnion elements[10]; };` 3. 初始化结构体数组。对于结构体数组的初始化,可以使用初始化列表的方式为每个元素赋值。例如:`struct MyStructArray myArray = { {1}, {2}, {3}, ... };` 总结起来,共用体定义结构体数组的步骤为:声明共用体类型 -> 定义结构体数组 -> 初始化结构体数组。通过这些步骤,可以成功定义并使用共用体定义的结构体数组。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [结构体和共用体](https://blog.csdn.net/c15855680841/article/details/115677917)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值