c程序写学生成绩管理程序,求最高分

请教各位,我以下的代码哪里有问题,我在运行的时候没有办法运行出来,我做的是学生成绩管理程序,如果代码正确的话,我按“4”会显示最高分的同学信息,但是我按的时候运行不出来,我要如何修改,我的代码如下:

void maxscore()
{
    struct student stud,studt;
    FILE *fp;
    if((fp=fopen("stud.rec","rb"))==NULL)
    {
        printf("无法打开文件stud.rec.\n");
        exit(0);
    }
    studt.score=0;
    while(fread(&stud,sizeof(stud),1,fp)==1)
        if(stud.score>studt.score) studt=stud;
    printf("\n\n成绩最高分部分的学生数据");
    printf("\n%-10s%-10s%-10s%-10s%\n","学号","姓名","性别","成绩");
    printf("%-10s%-10s%-10s%-10.1f\n",stud.num,stud.name,stud.sex,stud.score);
    fclose(fp);
    printf("\n\n\n按任意键返回主菜单。。。。。。");getchar(); 
}

if(stud.score>studt.score) studt=stud;
你这个的思路是将最高分放在studt里面
可是下面输出的是stud而不是studt

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/1092403
  • 你也可以参考下这篇文章:C语言 6.3 程序改错。爱因斯坦曾出过这样一道数学题:有一条长阶梯,若每步跨2阶,最后剩下1阶;若每步跨3阶,最后剩下2阶;若每步跨5阶,最后剩下4阶。若每步跨6阶,则最后剩下5阶。
  • 除此之外, 这篇博客: 看完这篇文章还不会顺序表和链表,请寄刀片给我中的 💦 链表的分类 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    实际中链表的结构非常多样,以下情况组合起来就有8种链表结构:
    注:本章只了解单链表
    

    1️⃣ 单向或者双向

    在这里插入图片描述
    2️⃣ 带头或者不带头
    在这里插入图片描述
    3️⃣ 循环或者非循环
    在这里插入图片描述


    🎗虽然有这么多的链表结构,但是实际中最常用的只有两种结构

    1️⃣ 无头单向非循环链表
    在这里插入图片描述
    2️⃣ 带头双向循环链表
    在这里插入图片描述
    ⚠ 注意:
    ▶ 无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多。
    ▶ 带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单了,后面我们代码实现了就知道了。

  • 以下回答来自chatgpt:

    如果您希望chatgpt更好地理解您的问题,可以考虑以下几点进行优化:

    1.语言简洁明了,不要使用过于复杂的句子和词汇,尽可能使用常用词汇和简短语句。

    2.问题描述尽可能具体,包括具体的程序名称、操作步骤、出现的错误提示等,以方便chatgpt更好地理解您的问题。

    3.尝试使用示例代码或截图等辅助工具,以更清晰地展示您的问题。

    对于程序未显示最高分同学信息的问题,可以根据具体情况进行以下几个方面的排查:

    1.确保程序已经正确连接到数据库或读取了需要的文件等数据源。

    2.检查程序代码中与显示最高分信息相关的代码是否存在逻辑错误或语法错误等问题。

    3.尝试打印相关信息或进行调试,以确定程序是否正确读取并处理了最高分信息。

    如果在排查过程中出现错误信息,可以尝试查找该错误信息在相关代码或文档中的具体含义,并进行逐步分析和修复。最终目的是确保程序正确显示最高分同学信息,并符合您的预期效果。

    以下为问题重述:

    我在程序中按下“4”后,程序未能显示最高分同学信息。我想得到程序正确显示最高分同学信息的效果。程序连接到了正确的数据源,但我不知道问题的具体出现原因,也没有看到任何的错误提示。请您提供具体的解决方案。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

两个问题可能导致你无法正确运行出最高分的同学信息:

  1. 文件打开模式问题:在打开文件的时候,你使用了"rb"作为打开模式,这适用于二进制文件的读取,但是你的文件似乎是包含文本数据的。你可以尝试使用"r"作为打开模式,以文本方式打开文件。
  2. printf格式字符串问题:在最后输出学生信息的printf语句中,你在格式字符串中使用了"%"符号,这可能导致格式字符串解析错误。请将"%"符号前的"%"修正为"\",即使用"\%"。
    修改后的代码如下:
    void maxscore()
    {
     struct student stud, studt;
     FILE *fp;
     if ((fp = fopen("stud.rec", "r")) == NULL)
     {
         printf("无法打开文件stud.rec.\n");
         exit(0);
     }
     studt.score = 0;
     while (fread(&stud, sizeof(stud), 1, fp) == 1)
         if (stud.score > studt.score)
             studt = stud;
     printf("\n\n成绩最高分部分的学生数据");
     printf("\n%-10s%-10s%-10s%-10s\n", "学号", "姓名", "性别", "成绩");
     printf("%-10s%-10s%-10s%-10.1f\n", studt.num, studt.name, studt.sex, studt.score);
     fclose(fp);
     printf("\n\n\n按任意键返回主菜单。。。。。。");
     getchar();
    }
    
    我在代码中假设了你已经定义了struct student结构体类型。如果你还没有定义,请确保在代码的开头进行定义。
    另外,请确保stud.rec文件存在并且包含正确的数据格式,以便能够正确读取学生信息。