问题遇到的现象和发生背景
c语言运动会统计问题
遇到的现象和发生背景,请写出第一个错误信息
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
#include<stdio.h>
#include<math.h>
#include<process.h>
#define N 20 //学校最大数目
#define M 20 //男子项目最大数
#define W 20 //女子项目最大数
//存放项目信息的结构体
typedef struct
{
int inum;//项目编号
int top;//取名次的数目
int range[5];//名次
int mark[5];//分数
}itemnode;
//存放学校信息的结构体
typedef struct
{
int snum;//学校编号
int score;//学校总分
int mscore;//男子总分
int wscore;//女子总分
itemnode t[M + W];//项目数组
}snode;
snode a[N];//定义一个学校数组
//菜单函数
void menu(int n,int m,int w)
{//n代表学校数,m代表男子数,w代表女子数
int c;
void input(int n,int m,int w);//输入功能
void output(int n,int m,int w);//输出功能
void sortput(int n,int m,int w);//排序输出
void search(int n,int m,int w);//查询功能
printf("\t\t\t欢迎使用\t\t\t\t\t\n");
printf("宝鸡运动会分数统计系统\n\n");
printf("1.信息输入\n");
printf("2.统计输出\n");
printf("3.排序输出\n");
printf("4.信息查询\n");
printf("5.退出系统\n\n");
printf("=======================================================\n\n");
printf("请输入您想要实现的功能(0--4):");
scanf("%d",&c);
switch(c){
case 1:
input(n,m,w);
break;
case 2:
output(n,m,w);
break;
case 3:
sortput(n,m,w);
break;
case 4:
search(n,m,w);
break;
case 5:
printf("感谢使用,祝您天天开心!!\n");
exit(0);//正常退出
default:
printf("您输入有误,请重新输入!");
menu(n,m,w);
}
}
//将信息写入文件中
void savetofile()
{
FILE *fp;//定义一个文件指针
int i;
if(NULL == (fp = fopen("file.txt","w"))){
printf("打开文件失败!\n");
return;
}
for(i = 0;i < N;i ++){
if('\0' != a[i].snum)
if(fwrite(&a[i],sizeof(snode),1,fp) != 1){
printf("存入信息失败!\n");
return;
}
}
fclose(fp);//关闭文件
}
//将信息从文件里取出
void readfromfile()
{
int i;
FILE *fp;
if((fp=fopen("file.txt","rb"))==NULL){
printf("文件打开失败!\n");
return;
}
for(i = 0;i < N;i ++){
fread(&a[i],sizeof(snode),1,fp);
}
fclose(fp);
}
//信息输入功能
void input(int n,int m,int w)
{
int i,j,s,k,q = 1;
for(i = 0;i < n;i ++){
printf("请输入学校的编号:");
scanf("%d",&a[i].snum);
for(j = 0;j < m + w;j ++){//总的项目的输入
printf("请输入运动会项目编号:");
scanf("%d",&a[i].t[j].inum);
printf("请输入该项目取前3还是前5(输入3或5):");
scanf("%d",&a[i].t[j].top);
if(3 == a[i].t[j].top){
printf("该学校在此项目中获得的名次的个数(1--3):");
}else if(5 == a[i].t[j].top){
printf("该学校在此项目中获得的名次的个数(1--5):");
}else{
printf("输入有误!程序退出....");
return;
}
scanf("%d",&k);//输入获得名次的个数
for(s = 0;s < k;s ++){
if(3 == a[i].t[j].top){
printf("请输入获得的名次(1--3):");
}else{
printf("请输入获得的名次(1--5):");
}
scanf("%d",&a[i].t[j].range[s]);//输入所获得的名次的信息
}
printf("\n");
}
}
for(i = 0;i < n;i ++){
//初始化分数
a[i].score=0;//学校总分
a[i].mscore=0;//男子总分
a[i].wscore=0;//女子总分
}
for(i = 0;i < n;i ++){
for(j = 0;j < m + w;j ++){
if(0 == i){
printf("运动会项目%d取得是前3还是前5(输入3或5):",j + 1);
scanf("%d",&a[i].t[j].top);
}
for(s = 0;s < 5;s ++){
if(3 == a[i].t[j].top){//如果是取前三
switch(a[i].t[j].range[s]){
case 0:
a[i].t[j].mark[s] = 0 ;
break;
case 1:
a[i].t[j].mark[s] = 5;
break;
case 2:
a[i].t[j].mark[s] = 3;
break;
case 3:
a[i].t[j].mark[s] = 2;
break;
}
}else if(5 == a[i].t[j].top){
switch(a[i].t[j].range[s]){
case 0:
a[i].t[j].mark[s] = 0;
break;
case 1:
a[i].t[j].mark[s] = 7;
break;
case 2:
a[i].t[j].mark[s] = 5;
break;
case 3:
a[i].t[j].mark[s] = 3;
break;
case 4:
a[i].t[j].mark[s] = 2;
break;
case 5:
a[i].t[j].mark[s] = 1;
break;
}
}else if(a[i].t[j].top != 3 || a[i].t[j].top != 5){
printf("信息输入错误!程序退出\n");
printf("\n");
exit(0);
}
a[i].score = a[i].score + a[i].t[j].mark[s];//学校总分
if(j < m){
a[i].mscore = a[i].mscore + a[i].t[j].mark[s];
}else{//女子总分
a[i].wscore = a[i].wscore + a[i].t[j].mark[s];
}
}
}
}
printf("输入完毕!(返回菜单请输入1):");
scanf("%d",&q);
printf("\n");
if(q != 1){
printf("不能再添加信息了!");
}
printf("\n");
savetofile();//保存文件
menu(n,m,w);
}
#if(1)
void output(int n,int m,int w) /*2.统计输出*/
{
readfromfile();
int i,j,s,q=0;
for(i = 0;i < n;i++) /*显示结果*/
{
printf("学校编号:%d 学校总分:%d 男子总分:%d 女子总分:%d\n",a[i].snum,a[i].score,a[i].mscore,a[i].wscore);
for(j=0;j< m+w;j++)
{
printf("项目编号:%d 所取名次数量:%d\n",a[i].t[j].inum,a[i].t[j].top);
for(s=0;s<5;s++)
{
if(a[i].t[j].range[s]!=0)
printf("名次:%d 分数:%d\n",a[i].t[j].range[s],a[i].t[j].mark[s]);
}
}
printf("\n");
}
printf("\n");
printf("统计完毕!返回? 1是 2否"); /*返回菜单*/
scanf("%d",&q);
printf("\n");
if(q!=1)
printf("统计已经结束!");
printf("\n");
menu(n,m,w);
}
#endif
运行结果及详细报错内容
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
不知道为什么从第二个学校后面就开始数据炸裂了,应该是统计输出那块出问题了,求有经验的人帮忙看看