c语言成绩管理delate后有一行变成0

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

做了一个成绩管理,但在进行delate函数后再进行输入,发现浏览时中间会有一堆0,无法解决

问题相关代码,请勿粘贴截图
#include<stdio.h> 
#include <stdlib.h> 
#include <string.h> 
typedef struct
{
    long class_1;//班级 
    long number;//学号 
    char name[20];//姓名 
    float math;//数学 
    float c_program;//C 语言 
    float physics;//大学物理 
    float english;//大学英语 
    float polity;//政治 
    float sport;//体育 
    float summary;//总分 
    float average;//平均分 
}Student;
Student stud[100];//定义结构体数组变量的大小 
static int i = 0;//i 用于记录输入的学生的个数 


int menu()//菜单函数 
{
    int a;
    printf("***********************学生信息管理系统*************************\n");//菜单选择 
    printf("\t\t【1】输入学生信息\n");
    printf("\t\t【2】浏览学生信息\n");
    printf("\t\t【3】查找学生信息\n");
    printf("\t\t【4】修改学生信息\n");
    printf("\t\t【5】删除学生信息\n");
    printf("\t\t【6】读取学生信息\n");
    printf("\t\t【7】保存学生信息\n");
    printf("\t\t【8】按平均分排序\n");
    printf("\t\t【9】输出挂科名单\n");
    printf("\t\t【0】退出本系统\n");
    printf("\t\t电信211 马梁 208210634\n");
    printf("***********************学生信息管理系统*************************\n");
    printf("请选择你要的操作【0-9】:");
    scanf("%d", &a);//读入一个数 
    while (a < 0 || a>9)
    {
        printf("输入错误!请重新输入。\n");
        scanf("%d", &a);//循环
    }system("cls");//清屏 
    return(a);//返回 a 的值 
}
int input(Student stud[])//输入学生信息 
{
    char flag = 'Y';
    while (flag == 'y' || flag == 'Y')//判断 
    {
        printf("请输入该学生的班级:"); //交互输入学生信息 
        scanf("%ld", &stud[i].class_1);
        printf("请输入该学生的学号:");
        scanf("%ld", &stud[i].number);
        printf("请输入该学生的姓名:");
        scanf("%s", &stud[i].name);
        printf("请输入该学生的“数学”分数:");
        scanf("%f", &stud[i].math);
        printf("请输入该学生的“C 程序设计语言”分数:");
        scanf("%f", &stud[i].c_program);
        printf("请输入该学生的“大学物理”分数:");
        scanf("%f", &stud[i].physics);
        printf("请输入该学生的“大学英语”分数:");
        scanf("%f", &stud[i].english);
        printf("请输入该学生的“体育”分数:");
        scanf("%f", &stud[i].sport);
        printf("请输入该学生的“政治”分数:");
        scanf("%f", &stud[i].polity);
        getchar();//用于消除回车键 
        stud[i].summary = stud[i].math + stud[i].c_program + stud[i].physics
            + stud[i].english + stud[i].sport + stud[i].polity;
        stud[i].average = stud[i].summary / 6;
        printf("该学生的总分为:%6.2f\t 平均分为:%6.2f\n", stud[i].summary, stud[i].average);
        i++;
        printf("继续输入学生信息请按:Y or y,退出请按:N or n.\n");
        scanf("%c", &flag);//判断是否继续输入 
    }
    printf("按任意键回主菜单\n");
    getchar();
    system("cls");
    return(i);
}
void Display(Student stud[], int n)//显示所有记录 
{
    int k;
    if (n == 0)
        printf("暂无学生记录!\n");
    else
    {
        printf("   班别   学号     姓名   数学  C语言   物理   英语   体育   政治   总分   平均分\n");
        for (k = 0; k < n; k++)//循环输出 
        {
            printf("%7ld", stud[k].class_1);
            printf("%7ld", stud[k].number);
            printf("%9s", stud[k].name);
            printf("%7.2f", stud[k].math);
            printf("%7.2f", stud[k].c_program);
            printf("%7.2f", stud[k].physics);
            printf("%7.2f", stud[k].english);
            printf("%7.2f", stud[k].sport);
            printf("%7.2f", stud[k].polity);
            printf("%7.2f", stud[k].summary);
            printf("%8.2f\n", stud[k].average);
        }
    }
    system("pause");
    system("cls");
}
void Sort(Student stud[], int i)//按平均分排序 
{
    int m, n, k;//m,n 为循环变量 
    Student t;
    for (m = 0; m < i - 1; m++)//排序 
        for (n = m + 1; n < i; n++)
            if (stud[m].average < stud[n].average)
            {
                t = stud[m];
                stud[m] = stud[n];
                stud[n] = t;
            }
    printf("排序后的顺序为:\n"); 
    printf("   班别   学号     姓名   数学  C语言   物理   英语   体育   政治   总分   平均分\n");
        for (k = 0; k < i; k++)//循环输出 
        {
            printf("%7ld", stud[k].class_1);
            printf("%7d", stud[k].number);
            printf("%9s", stud[k].name);
            printf("%7.2f", stud[k].math);
            printf("%7.2f", stud[k].c_program);
            printf("%7.2f", stud[k].physics);
            printf("%7.2f", stud[k].english);
            printf("%7.2f", stud[k].sport);
            printf("%7.2f", stud[k].polity);
            printf("%7.2f", stud[k].summary);
            printf("%8.2f\n", stud[k].average);
        }
    system("pause");
    system("cls");
}
void Search(Student stud[], int i)//查找并显示一个记录 
{
    int p, k;//p 为要查找的学生学号,t 为循环 节,s 用来判断循环是否结束
        char flag = 'y';
    while (flag == 'y' || flag == 'Y')
    {
        printf("请输入要查找的学生学号:");
        scanf("%d", &p);
        getchar();
        for (k = 0; p != stud[k].number && k < i; k++);
        if (k == i)printf("该学号不存在!\n");
        else {
            printf("该学生的信息为:\n");
            printf("   班别   学号     姓名   数学  C语言   物理   英语   体育   政治   总分   平均分\n");
                printf("%7ld", stud[k].class_1);
            printf("%7ld", stud[k].number);
            printf("%9s", stud[k].name);
            printf("%7.2f", stud[k].math);
            printf("%7.2f", stud[k].c_program);
            printf("%7.2f", stud[k].physics);
            printf("%7.2f", stud[k].english); printf("%7.2f", stud[k].sport);
            printf("%7.2f", stud[k].polity);
            printf("%7.2f", stud[k].summary);
            printf("%8.2f\n", stud[k].average);
        }
        printf("继续查找学生信息请输入:Y or y,退出输入:N or n\n");
        scanf("%c", &flag);//判断是否继续输入 
    }
    system("cls");
}
void flunk()
{
    int k;
    FILE* fp;//定义文件指针
    char flunk[100];//定义文件名
    for (k = 0; k< i; k++)
    {
        if (stud[k].math < 60 || stud[k].c_program < 60 || stud[k].physics < 60 || stud[k].english < 60 || stud[k].polity < 60 || stud[k].sport < 60)
        {
            printf("该学生的信息为:\n");
            printf("   班别   学号     姓名   数学  C语言   物理   英语   体育   政治   总分   平均分\n");
            printf("%7ld", stud[k].class_1);
            printf("%7ld", stud[k].number);
            printf("%9s", stud[k].name);
            printf("%7.2f", stud[k].math);
            printf("%7.2f", stud[k].c_program);
            printf("%7.2f", stud[k].physics);
            printf("%7.2f", stud[k].english); printf("%7.2f", stud[k].sport);
            printf("%7.2f", stud[k].polity);
            printf("%7.2f", stud[k].summary);
            printf("%8.2f\n", stud[k].average);

            if ((fp = fopen("flunk", "wb")) == NULL)//打开文件 
            {
                printf("保存失败!\n");
            }
            else printf("保存到文件flunk成功\n");
            fwrite(&stud[k], sizeof(Student), 1, fp);
            fclose(fp);
        }
        else printf("没有挂科学生!\n");
    }
    system("pause");
    system("cls");
}

int Delete(Student stud[], int i)//根据输入的学号删除学生的信息 
{
    long s;
    int t;
    Student * p;
    p = &stud[100];
    char a = 'Y';//判断循环是否继续 
    while (a == 'y' || a == 'Y')
    {
        printf("请输入需要删除学生的学号:\n");//采用交互式删除 
        scanf("%ld", &s);
        getchar();//消除回车键的影响 
        for (t = 0; t < i && s != stud[t].number; t++);
        if (s == stud[t].number)
        {
            for (p=stud +t; p <stud+ i; p++)
                *p= *(p+1);
            i = i - 1;
            printf("删除成功!\n");
        }
        else printf("没有找到要删除的学号!\n");
        printf("是否继续删除,继续请按'Y'或'y',退出请按'N'或'n'.\n");
        a = getchar();//判断是否继续 
        getchar();//清除缓冲区的字符-回车。 
    }
    system("cls"); return(i);
}
void change(Student stud[], int i)//修改学生的信息 
{
    long p = 0;//p 用来表示要删除的学生的学号 
    int k;//k 为循环变量 
    char a = 'y';
    while (a == 'y' || a == 'Y')
    {
        printf("\t\t 学生信息修改:\n");
        printf("请输入要修改的学生的学号:\n");
        scanf("%ld", &p);
        for (k = 0; p != stud[k].number && k < i; k++);
        if (k == i)printf("无法找到该学生的信息\n");
        else {
            printf("该学生的信息为:\n");
            printf("   班别   学号     姓名   数学  C语言   物理   英语   体育   政治   总分   平均分\n");
                printf("%7ld", stud[k].class_1);
            printf("%7ld", stud[k].number);
            printf("%9s", stud[k].name);
            printf("%7.2f", stud[k].math);
            printf("%7.2f", stud[k].c_program);
            printf("%7.2f", stud[k].physics);
            printf("%7.2f", stud[k].english);
            printf("%7.2f", stud[k].sport);
            printf("%7.2f", stud[k].polity);
            printf("%7.2f", stud[k].summary);
            printf("%8.2f\n", stud[k].average);
            printf("请输入该学生的新信息:\n");
            printf("请输入该学生的班级:");//交互输入学生信息 
            scanf("%d", &stud[k].class_1);
            printf("请输入该学生的学号:");
            scanf("%d", &stud[k].number);
            printf("请输入该学生的姓名:");
            scanf("%s", &stud[k].name);
            printf("请输入该学生的“数学”分数:");
            scanf("%f", &stud[k].math);
            printf("请输入该学生的“C 程序设计语言”分数:");
            scanf("%f", &stud[k].c_program); printf("请输入该学生的“大学物理”分数:");
            scanf("%f", &stud[k].physics);
            printf("请输入该学生的“大学英语”分数:");
            scanf("%f", &stud[k].english);
            printf("请输入该学生的“体育”分数:");
            scanf("%f", &stud[k].sport);
            printf("请输入该学生的“政治”分数:");
            scanf("%f", &stud[k].polity);
            getchar();
            stud[k].summary = stud[k].math + stud[k].c_program + stud[k].physics
                + stud[k].english + stud[k].sport + stud[k].polity;
            stud[k].average = stud[k].summary / 6;
            printf("修改成功!\n");
        }
        printf("是否继续修改,继续请按'Y'或'y',退出请按'N'或'n'.\n");
        a = getchar();//判断是否继续 
    }
    system("pause");
    system("cls");
}
int Read(Student stud[], int i)//从文件中读入学生信息 
{
    int k = i;
    FILE* fp;//定义一个文件类型的指针 
    char filename[20];//定义文件名 
    printf("请输入文件名:\n");
    scanf("%s", &filename);//输入文件名 
    if ((fp = fopen(filename, "rb")) == NULL)//打开文件 
    {
        printf("无法打开该文件!\n");//打开失败信息 
        return 0;
    }
    printf("从文件%s 中读入的数据为:\n", filename);
    printf("   班别   学号     姓名   数学  C语言   物理   英语   体育   政治   总分   平均分\n");
    
    while (fread(&stud[k], sizeof(Student), 1, fp))
        {
            printf("%7ld", stud[k].class_1); printf("%7ld", stud[k].number);
            printf("%9s", stud[k].name);
            printf("%7.2f", stud[k].math);
            printf("%7.2f", stud[k].c_program);
            printf("%7.2f", stud[k].physics);
            printf("%7.2f", stud[k].english);
            printf("%7.2f", stud[k].sport);
            printf("%7.2f", stud[k].polity);
            printf("%7.2f", stud[k].summary);
            printf("%8.2f\n", stud[k].average);
            k++;
            //fread(&stud[k], sizeof(Student), 1, fp);
        }
    fclose(fp);
    printf("读入成功,\n");
    system("pause");
    system("cls");
    return(k);
}
void Save(Student stud[], int i)//将所有记录写入文件 
{
    int k = 0;
    FILE* fp;//定义文件指针 
    char filename[20];//定义文件名 
    printf("请输入你要存储学生信息的文件名:");//输入文件名 
    scanf("%s", &filename);
    if ((fp = fopen(filename, "wb")) == NULL)//打开文件 
    {
        printf("无法打开该文件!\n");//打开失败信息 
        return;
    }
    printf("保存到文件%s 里的信息为:\n", filename);
    while (k < i)
    {
        fwrite(&stud[k], sizeof(Student), 1, fp);
        printf("%7ld", stud[k].class_1);
        printf("%7d", stud[k].number);
        printf("%9s", stud[k].name);
        printf("%7.2f", stud[k].math);
        printf("%7.2f", stud[k].c_program);
        printf("%7.2f", stud[k].physics); printf("%7.2f", stud[k].english);
        printf("%7.2f", stud[k].sport);
        printf("%7.2f", stud[k].polity);
        printf("%7.2f", stud[k].summary);
        printf("%8.2f\n", stud[k].average);
        k++;
    }
    ////fclose(fp);
    printf("信息保存成功,");
    system("pause");
    system("cls");
}
int main()//主函数 
{
    int n = 0;
    while (1)
    {
        switch (menu())//选择判断要执行的语句 
        {
        case 1:
            printf("\n*******录入学生信息*******\n");
            n = input(stud); break;
        case 2:
            printf("\n*******浏览学生信息*******\n"); 
            Display(stud, n); break;
        case 3:
            printf("\n*******查询学生信息*******\n");
            Search(stud, n); break;
        case 4:
            printf("\n*******修改学生信息*******\n");
            change(stud, n); break;
        case 5:
            printf("\n*******删除学生信息*******\n");
            n = Delete(stud, n); break;
        case 6:
            printf("\n*******读取学生信息*******\n");
            n = Read(stud, n); break;
        case 7:
            printf("\n*******保存学生信息*******\n");
            Save(stud, n); break;
        case 8:
            printf("\n*******按平均分排序*******\n");
            Sort(stud, n); break;
        case 9:
            printf("\n*******输出挂科名单*******\n");
            flunk(); break;
        case 0:
            printf("\n*******感谢您的使用*******\n");
            exit(0);
        }
    }
    return 0;
}



运行结果及报错内容

没有报错,但是中间的0无法消除

我的解答思路和尝试过的方法

一开始以为是i的问题,定义了static但是发现问题依然存在。

我想要达到的结果

删除后在进行输入可以没有0

运行截图贴一张?有点没看懂操作流程是什么

用sizeof(结构体总大小)/sizeof(结构体数组[0])获取元素个数

或者自定义函数len返回数组长度