C语言之联合(union)
联合(union)的用法跟结构体的用法相似,也可以存储不同类型的数据,在访问成员的时候,遵循两种方式,一种是点(.)运算符,另一种是指针(->)的形式
下面来看一个例子,该例子使用联合的方式构造了一个班级的数据结构。
该数据结构包含班级名(classname),老师的信息(teacher info),学生的信息(student info)
该实例主要是对信息进行录入,然后输出该信息
#include <stdio.h> #define MAX_SIZE 30 #define MIN_SIZE 2 int choose=1; //构建一个学生结构体 student struct struct student { char stu_num[MAX_SIZE]; char stu_name[MAX_SIZE]; char stu_sex[MIN_SIZE]; int stu_age;ujewdc }; //构造一个教师的结构体 teacher struct struct teacher { char tea_id[MAX_SIZE]; char tea_name[MAX_SIZE]; char tea_sex[MIN_SIZE]; int tea_age; }; //构造一个班级的联合 union class //因为class 里边有学生(student) 和老师(teacher),所以要将学生和老师包含进来 union Class { char classname[MAX_SIZE]; struct student stusoft; struct teacher teasoft; } ; union Class getinfo(union Class cls); union Class chooseinfo(union Class cls); void showinfo(union Class cls); int main() { //声明一个union union Class soft; //进行信息的录入 soft=getinfo(soft); //输出该该班的信息 soft=chooseinfo(soft); showinfo(soft); return 0; } //班级信息的录入 union Class getinfo(union Class cls) { printf("该程序用于对班级信息的录入\n"); printf("请输入班级的名字\n"); gets(cls.classname); return cls; } //进行信息的选择(是对于老师还是对于学生) union Class chooseinfo(union Class cls) { printf("请选择相应的录入信息 1代表学生,2代表老师 \t"); scanf("%d",&choose); switch(choose) { case 1: printf("请输入学生的学号\t"); scanf("%s",&cls.stusoft.stu_num); printf("请输入学生的姓名\t"); scanf("%s",&cls.stusoft.stu_name); printf("请输入学生的性别\t"); scanf("%s",&cls.stusoft.stu_sex); printf("请输入学生的年龄\t"); scanf("%d",&cls.stusoft.stu_age); return cls; break; case 2: printf("请输入老师的职工号\t"); scanf("%s",&cls.teasoft.tea_id); printf("请输入老师的姓名\t"); scanf("%s",&cls.teasoft.tea_name); printf("请输入老师的性别\t"); scanf("%s",&cls.teasoft.tea_sex); printf("请输入老师的年龄\t"); scanf("%d",&cls.teasoft.tea_age); return cls; break; } } //此方法用于显示录入的数据 void showinfo(union Class cls) { int retrieve=1; printf("请输入要查询的信息 1:查询学生,2:查询老师\n"); scanf("%d",&retrieve); switch(retrieve) { case 1: printf("以下是学生的信息\n"); printf("--------------------\n"); printf("该学生的学号是\t%s\n",cls.stusoft.stu_num); printf("该学生的姓名是\t%s\n",cls.stusoft.stu_name); printf("该学生的性别是\t%s\n",cls.stusoft.stu_sex); printf("该学生的年龄是\t%d\n",cls.stusoft.stu_age); break; } }

浙公网安备 33010602011771号