沉稳的紫外线 2022-12-28 15:23 采纳率: 62.5%
浏览 64

C语言数据结构运动会分数统计问题

问题遇到的现象和发生背景

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

运行结果及详细报错内容

img

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

不知道为什么从第二个学校后面就开始数据炸裂了,应该是统计输出那块出问题了,求有经验的人帮忙看看

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
  • 写回答

2条回答 默认 最新

  • SoftwareTeacher 《编程之美》作者 2022-12-28 15:40
    关注
    1. 感谢你用了 ‘代码块’ 来放代码
    2. 你用更少的数据来测试,如何?
    评论

报告相同问题?

问题事件

  • 修改了问题 12月28日
  • 修改了问题 12月28日
  • 创建了问题 12月28日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀