结构体设计出错,不知错在哪,求大神指导,谢谢!!!

原题,完成校际运动会成绩管理功能,包括输入比赛项目event及参赛学校名字name,输入比赛成绩score,参赛选手名字person,项目名次rank,计算总分sum,其中,sum为score加上项目的加分。
各项目名次取法有如下几种:
项目一:取前5名:第1名得分7,第2名得分5,第3名得分3,第4名得分2,第5名得分1;其余名次不加分。
项目二:取前3名:第1名得分5,第2名得分3,第3名得分2;其余名次不加分。

输出第一所学校的score和sum。

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define LEN sizeof(struct School)

struct School

{int event;

 char name[20];

 int  score;

 char person[20];

 int rank;

 int sum;

 struct School *next;

};

static int n;

struct School *creat(void)

{struct School *head;

 struct School *p1,*p2,*a[100];

 n=0;

 p1=p2=(struct School *)malloc(LEN);

 head=NULL;

 while(p1->event!=0)

 {n=n+1;

  if(n==1)a[0]=head=p1;

  else p2->next=p1;

  p2=p1;

  p1=(struct School *)malloc(LEN);

  printf("the event is:(put 0 end the putting of school):");

  scanf("%d",&p1->event);

  printf("school name:");

  getchar();

  gets(p1->name);

  printf("school score:");

  scanf("%d",&p1->score);

  printf("person name:");

  getchar();

  gets(p1->person);

  printf("school rank:");

  scanf("%d",&p1->rank);

  switch(p1->event)

  {case 0:p1->sum=p1->score;break;

   case 1:

    {switch(p1->rank)

     {case 1:p1->sum=p1->score+7;break;

      case 2:p1->sum=p1->score+5;break;

      case 3:p1->sum=p1->score+3;break;

      case 4:p1->sum=p1->score+2;break;

      case 5:p1->sum=p1->score+1;break;

      default:p1->sum=p1->score;}}break;

   case 2:

      {switch(p1->rank)

      {case 1:p1->sum=p1->score+5;break;

       case 2:p1->sum=p1->score+3;break;

       case 3:p1->sum=p1->score+2;break;

       default:p1->sum=p1->score;}}break;

    default:p1->sum=p1->score;

  }

  }

  p2->next=NULL;

  return(a[0]);

    }

int main()

{struct School *pt;

pt=creat();

printf("\nscore:%d\nsum:%d\n",pt->score,pt->sum);

    return 0;

}

输入的score是123,event 为1,rank为1.输出的score总是一个很大的数据15564562,输出的sum 也很大,1123

5578.求教为什么?

级数
浏览 1701回答 2
2回答

BlueCitizen

哦,能进入循环,我说错了,抱歉。while(p1->event!=0)对于这个入口循环,event并没有赋值,那么系统会随机给一个值,给什么样的值看运气,一般会很大。

BlueCitizen

最开始没有赋值,无法进入循环。另外最好加一些注释,这样看着很乱
打开App,查看更多内容
随时随地看视频慕课网APP