You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言用struct结构体统计学生成绩、取最优小测并解决输入异常问题

问题定位与修复方案

直接原因(输入人数后直接终止)

原代码的for循环存在语法错误,录入学生、输出学生的循环写法均为for(i=0,i<n; i++;):for语句的三个表达式需要用分号分隔,且第三个表达式后不需要额外分号,语法错误直接触发程序崩溃终止。正确写法应为for(i=0; i<n; i++)。

其他需要修复的错误

  • 结构体成员定义错误:ID被定义为int ID[100]整型数组,不符合单条学生信息存储单个学号的需求,应改为int ID;
  • 输入格式符错误:读取字符串类型的学生姓名name时使用了%d格式符,应改为%s,且char数组名本身是地址无需加取地址符&
  • printf格式串缺失占位符:所有打印小测成绩的printf语句未添加%d占位符,例如printf("Best quiz mark is: \n",quiz1);应改为printf("Best quiz mark is: %d\n",quiz1);
  • else分支逻辑错误:comparison函数的else分支没有加花括号,导致quiz_best = quiz3;语句无论判断条件是否成立都会执行,逻辑错误
  • 循环嵌套逻辑错误:输出所有学生信息的for循环嵌套在录入学生信息的for循环内部,且两个循环共用变量i,会覆盖外层循环的计数,导致录入逻辑完全混乱,应将输出循环移到录入循环外部
  • 函数返回值未接收:调用comparison函数后没有接收返回的最高小测成绩,导致输出的quiz_best为未初始化的垃圾值
  • 冗余声明:main函数开头的struct student_profile;是无意义的冗余声明,可以删除

修复后完整代码

#include <stdio.h>
struct student_profile
{
    char name[100];
    int ID; 
    int Final;
    int mid;
    int attendance;
    int assignment;
    int quiz1;
    int quiz2;
    int quiz3;
    int total_score; // 新增总分字段用于后续排名
} s[100];

int comparison(int quiz1, int quiz2, int quiz3)
{
    int quiz_best;
    if (quiz1>quiz2 && quiz1>quiz3)
    {
        printf("Best quiz mark is: %d\n",quiz1);
        quiz_best = quiz1;
    }
    else if (quiz2>quiz1 && quiz2>quiz3)
    {
        printf("Best quiz mark is: %d\n",quiz2);
        quiz_best = quiz2;
    }
    else {
        printf("Best quiz mark is: %d\n",quiz3);
        quiz_best = quiz3;
    }
    return quiz_best;
}

int main()
{
    int i,n,quiz_best;
    printf("Number of the student: \n");
    scanf("%d",&n);
    // 录入学生信息
    for(i=0; i<n; i++)
    {
        printf("\nStudent No: %d\n",i+1);
        printf("Name: ");
        scanf("%s", s[i].name); 
        printf("ID: ");
        scanf("%d",&s[i].ID);
        printf("Final: ");
        scanf("%d",&s[i].Final);
        printf("mid: ");
        scanf("%d",&s[i].mid);
        printf("attendance: ");
        scanf("%d",&s[i].attendance);
        printf("assignment: ");
        scanf("%d",&s[i].assignment);
        printf("quiz1: ");
        scanf("%d",&s[i].quiz1);
        printf("quiz2: ");
        scanf("%d",&s[i].quiz2);
        printf("quiz3: ");
        scanf("%d",&s[i].quiz3);
        // 计算最高小测成绩和总分
        quiz_best = comparison(s[i].quiz1, s[i].quiz2, s[i].quiz3);
        s[i].total_score = s[i].Final + s[i].mid + s[i].attendance + s[i].assignment + quiz_best;
    }
    // 输出所有学生信息
    printf("\n========== Students Informations ==========\n");
    for(i=0; i<n; i++)
    {
        printf("\nStudent No: %d\n",i+1);
        printf("Name: %s\n",s[i].name);
        printf("ID: %d\n",s[i].ID);
        printf("Final: %d\n",s[i].Final);
        printf("mid: %d\n",s[i].mid);
        printf("attendance: %d\n",s[i].attendance);
        printf("assignment: %d\n",s[i].assignment);
        printf("quiz1: %d\n",s[i].quiz1);
        printf("quiz2: %d\n",s[i].quiz2);
        printf("quiz3: %d\n",s[i].quiz3);
        printf("Total score: %d\n", s[i].total_score);
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者sun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:15:00