Mr.HO 发表于 2018-6-10 00:41:44

结构指针的强化

#define _CRT_SECURE_NO_WARINGS
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>

typedef struct Teacher
{
        char *tname;
        char **stu;
        int age;


}Teacher;

int creatTeacher(Teacher **Tp,int nt,int nstu)
{
    intret=0;
        if (NULL==Tp || 0==nt || 0==nstu)
        {
                ret=-1;
                return ret;
        }


        {
                Teacher *temp=NULL;
                int i,j;
                temp=(Teacher *)malloc(sizeof(Teacher)*nt);
                if (!temp)
                {
                        ret=-2;
                        goto END;
                }
               
                for(i=0;i<nt;i++)
                {
                        temp.tname=(char *)malloc(sizeof(char)*20);
                        if (!temp.tname)
                        {
                                ret=-3;
                                goto END;
                        }

                }

                for (i=0;i<nt;i++)
                {
                        temp.stu=(char **)malloc(sizeof(char *)*nt);
                        if (!temp.stu)
                        {
                                ret=-4;
                                goto END;
                        }
                        for (j=0;j<nstu;j++)
                        {
                                temp.stu=(char *)malloc(sizeof(char)*20);
                                if (!temp.stu)
                                {
                                        ret=-5;
                                        goto END;
                                }
                        }
                }


END:
                if (ret!=0)
                {
                        if (temp)
                        {
                                for (i=0;i<nt;i++)
                                {
                                        if (temp.tname)
                                        {
                                                free(temp.tname);
                                                temp.tname=NULL;
                                        }
                                        for (j=0;j<nstu;j++)
                                        {
                                                if (temp.stu)
                                                {
                                                        free(temp.stu);
                                                        temp.stu;
                                                }
                                        }
                                        free(temp);
                                }

                        }
                       

                }

                *Tp=temp;
                return ret;

        }


}



void initTeacher(Teacher *Tp,int nt,int nstu)
{
        if (NULL==Tp|| 0==nt || 0==nstu)
        {
                return;
        }

        {
                int i,j;
                for (i=0;i<nt;i++)
                {
                        printf("请输入第%d个导师的名字:",i+1);
                  scanf("%s",Tp.tname);
                        for(j=0;j<nstu;j++)
                        {
                                printf("请输入第%d个导师下的第%d个学生:",i+1,j+1);
                                scanf("%s",Tp.stu);
                        }
                        printf("请输入第%d个导师的年龄:",i+1);
                        scanf("%d",&Tp.age);

                }
                return;

        }


}


void sortTeacher(Teacher *Tp,int nt)
{
        if (NULL==Tp||0==nt)
        {
                return;
        }

        {
                Teacher temp;
                int i,j;
                for (i=0;i<nt;i++)
                {
                        for (j=i+1;j<nt;j++)
                        {
                                if (strcmp(Tp.tname,Tp.tname)<0)
                                {
                                        temp=Tp;
                                        Tp=Tp;
                                        Tp=temp;
                                }
                        }
                }

                return;
        }

}




void freeTeacher(Teacher **Tp,int nt,int nstu)
{
        if (NULL==Tp || 0==nt || 0==nstu)
        {
                return;
        }

        {
                Teacher *p=*Tp;
      int i,j;
      for (i=0;i<nt;i++)
      {
                        if (p.tname)
                        {
                                free(p.tname);
                                p.tname=NULL;
                        }
                        for(j=0;j<nstu;j++)
                        {
                                if (p.stu)
                                {
                                        free(p.stu);
                                     p.stu=NULL;
                                }
                        }
                        if(p.stu)
                        {
                        free(p.stu);
                        p.stu=NULL;
                        }

      }

                if (p)
                {
                        free(p);
                        *Tp=NULL;
                }
       
                return;




        }



}



void printTeacher(Teacher *Tp,int nt,int nstu)
{
        if (NULL==Tp || 0==nt || 0==nstu)
        {
                return;
        }
       

        {
                int i,j;
                for (i=0;i<nt;i++)
                {
                        printf("第%d个导师的姓名:%s\n",i+1,Tp.tname);
                        for(j=0;j<nstu;j++)
                        {
                                printf("第%d个导师下面的第%d个学生姓名:%s\n",i+1,j+1,Tp.stu);

                        }
                        printf("第%d个导师的年龄:%d\n",i+1,Tp.age);
                }
                return;


        }


}




void main()

{
        Teacher *Tp=NULL;
        int nt=3;
        int nstu=3;
        int ret =0;



   ret=creatTeacher(&Tp,nt,nstu);
       if (ret!=0)
       {
               printf("The Function creatTeacher() is Error:%d",ret);
               return;
       }
       initTeacher(Tp,nt,nstu);
       printTeacher(Tp,nt,nstu);
       sortTeacher(Tp,nt);
       printTeacher(Tp,nt,nstu);
       freeTeacher(&Tp,nt,nstu);



system("pause");
return;
}
页: [1]
查看完整版本: 结构指针的强化