求助,c语言程序卡死

唐突Yx 2017-01-05 01:13:43
结果输入函数里输入第二个运动员数据的时候程序崩溃






#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int N,M,W,i,z,j,k,t,s,p[15],q[15];
struct school //定义学校结构体数组
{
char name[20];
int score;
}
school[20];
struct student //定义学生结构体数组
{
char name[20];
char sex[10];
char school[20];
char event[20];
int mingci;
int score;
}
stu[500];
struct event //定义项目结构体数组
{
char name[20];
char sex[10];
}
event[50];


void menu(); //函数声明
void enter();
void result();
void search();
void define();
void search_school();
void search_event();
void continue_search();






//主函数
int main()
{
menu();
}

//主菜单函数
void menu()
{
int n;
do
{
printf("\t\t*******欢迎访问校际运动会管理系统***********\n");
printf("\t\t*****************MENU***********************\n");
printf("\t\t**************1、录入信息 *****************\n");
printf("\t\t**************2、录入比赛结果 *************\n");
printf("\t\t**************3、查找 *********************\n");
printf("\t\t**************4、退出 *********************\n");
printf("请选择(1-4):[ ]\b\b");
scanf("%d",&n);

if (n<1 || n>4)
{
printf("输入错误,请重新输入!\n");
menu();
}
switch(n)
{
case 1:enter();break;
case 2:result();break;
case 3:search();break;
case 4:return(0);
}
}

while (n <= 4 && n >= 1);


}


//信息输入函数
void enter()
{
int z;
printf("请输入参赛学校的个数:\n");
scanf("%d",&N);
printf("请输入男生参赛项目的个数:\n");
scanf("%d",&M);
printf("请输入女生参赛项目的个数:\n");
scanf("%d",&W);
printf("\n请选择计分方式:\n");
printf("\t1.NO.1:7',NO.2:5',NO.3:3',NO.4:2',NO.5:1'.\n");
printf("\t2.NO.1:5',NO.2:3',NO.3:2'.\n");
printf("\t3.用户自由决定.\n");
printf("请选择序号(1-3):[ ]\b\b");
scanf("%d",&z);
switch(z)
{
case 1:z=1;break;
case 2:z=2;break;
case 3:z=3;break;
}
menu();
}


//结果输入函数
void result()
{
int i,s,j;
printf("请输入得奖运动员个数: ");
scanf("%d",&s);
for(i=0;i<s;i++)
{
printf("\n姓名:");
scanf("%s",stu[i].name);
printf("\n性别:");
scanf("%s",stu[i].sex);
printf("\n学校:");
scanf("%s",stu[i].school);
printf("\n项目:");
scanf("%s",stu[i].event);
printf("\n名次:");
scanf("%d",stu[i].mingci);
if(z==1)
{
if(stu[i].mingci=1)
stu[i].score=7;
else if(stu[i].mingci=2)
stu[i].score=5;
else if(stu[i].mingci=3)
stu[i].score=3;
else if(stu[i].mingci=4)
stu[i].score=2;
else if(stu[i].mingci=5)
stu[i].score=1;
}
else if(z==2)
{
if(stu[i].mingci=1)
stu[i].score=5;
else if(stu[i].mingci=2)
stu[i].score=3;
else if(stu[i].mingci=3)
stu[i].score=2;
}
else if(z==3)
{
for(j=0;j<i;j++)
{
if(stu[i].mingci==p[j])
stu[i].score=q[j];
}
}
}
menu();
}


//查询函数
void search()
{
int h;
printf("请选择查询方式: \n\t 1.按学校查询\n\t 2.按项目查询\n");
scanf("%d",&h);
if(h==1)
search_school();
else if(h==2)
search_event();
}



//名次指定函数
void define()
{
int t,k;
printf("\n你要取前几名? \n");
scanf("%d",&t);
for(k=0;k<t;k++)
{
printf("输入要定义的名次: ");
scanf("%d",&p[k]);
printf("\n输入该名次的分值:");
scanf("%d",&q[k]);
}
}



//按学校查询函数
void search_school()
{
struct student s0;
int max=0,y=0;
printf("请输入你要查找的学校:");
scanf("%s",s0.school);
printf("\n\tschool \tathlete \tsex \tevent \tscore");
for(i=0;i<500;i++);
if(strcmp(s0.school,stu[i].school)==0)
{
printf("\n\t%-16s%-16s%-16s%-16s%-5d",stu[i].school,stu[i].name,stu[i].sex,stu[i].event,stu[i].score);
max+=stu[i].score;
y=1;
}
if(y==1)
{
printf("\n\t学校总分\t%d\n",max);
printf("\n\t参赛学校总数\t%d\n",N);
}
else if(y==0)
{
printf("\n输入错误,请重新输入");
search();
}
continue_search();
}



//按项目查询函数
void search_event()
{
struct student s1;
int x=0;
printf("请输入项目名称");
scanf("%s",s1.event);
printf("\n\tschool \tathlete \tsex \tmingci \tscore");
for(i=0;i<500;i++)
if(strcmp(s1.event,stu[i].event)==0)
{
x=1;
printf("\n\t%-16s%-16s%-16s%-16s%-5d",stu[i].school,stu[i].name,stu[i].sex,stu[i].event,stu[i].score);
}
if(x==1)
printf("项目总数:%d\n 男子项目:%d\t 女子项目:%d",M+W,M,W);
if(x==0)
{
printf("\n输入错误,请再次输入");
search();
}
continue_search();
}



//是否继续查询函数
void continue_search()
{
int r;
printf("是否继续查询? 选择:1.是. 2.返回主菜单.");
scanf("%d",&r);
if(r==1)
search();
else if(r==2)
menu();
}
...全文
1004 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐突Yx 2017-01-05
  • 打赏
  • 举报
回复
可以了,感谢各位的帮助,忘加取地址符号了,谢谢4楼提醒
赵4老师 2017-01-05
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。 printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
唐突Yx 2017-01-05
  • 打赏
  • 举报
回复
换了双等号,还是不行,断点不会啊,挺急的,麻烦大神帮忙改一下,在线等
zhh0000zhh 2017-01-05
  • 打赏
  • 举报
回复
if(stu[i].mingci=1) stu[i].score=7; else if(stu[i].mingci=2) stu[i].score=5; else if(stu[i].mingci=3) stu[i].score=3; else if(stu[i].mingci=4) stu[i].score=2; else if(stu[i].mingci=5) stu[i].score=1; } 这一片if(=)应该是if(==)吧
幻夢之葉 2017-01-05
  • 打赏
  • 举报
回复
加断点,进行单步调试

70,011

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧