为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

级数 2015-11-21 10:24:05
原题,完成校际运动会成绩管理功能,包括输入比赛项目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 也很大,11235578.求教为什么?
查看完整描述

2 回答

已采纳
?
BlueCitizen

TA贡献5条经验 获得超0个赞

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

查看完整回答
反对 回复 2015-11-22
  • 级数
    级数
    大神非常感谢!
  • 级数
    级数
    如果写完链表,我要设计一个函数能够查找输出链表里面第i个结构体,怎么办?i是变量,根据前面的函数,链表中有n个结构体。
  • BlueCitizen
    BlueCitizen
    用for循环来计数就可以了
?
BlueCitizen

TA贡献5条经验 获得超0个赞

最开始没有赋值,无法进入循环。另外最好加一些注释,这样看着很乱

查看完整回答
反对 回复 2015-11-21
  • 2 回答
  • 0 关注
  • 1705 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信