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;
    
    }
    
} 

  

 

posted @ 2016-10-31 16:18  爱吃猫的鱼z  阅读(351)  评论(0)    收藏  举报