看看代码,学生成绩管理系统的,我这代码错误怎么改啊,要哭了,跪谢各位

就是学生成绩管理系统的,运行不了。。这错误怎么改啊
#include<stdio.h>
#include<string.h>
struct student
{
char sno[20];
char sname[20];
int score[3];
int avg;
};
struct student stu[5]; //记录学生人数

void input_student(struct student s[], int n);//n为长度
void save(struct student s[], int n);
void print_student(struct student s[], int n);
void search_sno(struct student s[], int n, int sno);
void sort_student_on_avg(struct student s[], int n);
void delete(struct student s[], int n);
void modify(struct student s[], int n);

int main()
{
input_student(stu,5);
printf("请输出结果:\n");
print_student(stu,5);
printf("请输出结果:\n");
sort_student_on_avg(stu, 5);
save(stu, 5);
int del_sno, find_sno;
printf("\n请输入要查找的学生学号:");
scanf_s("%ld", &find_sno);
search_sno(stu,5,find_sno);
printf("\n请输入要删除的学号:");
scanf_s("%ld", &del_sno);
delete(stu,5,del_sno);
modify(stu,5);
return 0;
}

void input_student(struct student s[], int n)//信息录入
{
int i, j;
printf("输入信息:");
for (i = 0; i < n; i++)
{
scanf_s("%s %s",s[i].sno,sizeof(s[i].sno),s[i].sname,sizeof(s[i].sname));
float sum;
sum = 0;
for (j = 0; j < 3; j++)
{
scanf_s("%f",&s[i].score[j]);
sum = sum + s[i].score[j];
}
s[i].avg = sum / 3;
}
}

void print_student(struct student s[], int n)//浏览
{
int i,j;
for (i = 0; i < n; i++)
{
printf("%s %s",s[i].sno,s[i].sname);
for (j = 0; j < 3; j++)
printf("%f ", s[i].score[j]);
printf("\n");
}
return 0;
}

void save(struct student s[], int n)//保存
{
FILE* fp;
struct student* t;
t = s;
fopen_s(&fp, "struct student.dat", "w");
if(fp==NULL)
{
printf("文件struct student.dat不能打开! \n");
exit(0);
}
for (t = s; t != NULL;fp!=NULL)
{
fwrite(t, sizeof(t), 1, fp);
}

fclose(fp);
return 0;

}

void search_sno(struct student s[], int n, int sno)//查询
{
char a[20];
printf("请输出要查找的学号:%s", a);
scanf_s("%s", a, 20);
struct student* p1;
p1 = a;
if (p1->sno == a)
{
printf("找到 %d 号学生\n", sno);
printf("%s,%f,%f,%f\n",p1->sno,p1->score[0],p1->score[1],p1->score[2]);
}
else
{
printf("没有找到 %d 号学生\n", sno);
}
}

void sort_student_on_avg(struct student s[], int n)//排序
{
int i, j;
struct student temp;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if( (s[j].avg )> (s[j+1].avg))
{
temp =s[j];
s[j] = s[j+1];
s[j+1]= temp;
}
}
}
printf("请输出排序之后的信息:\n");
for (i = 0; i < n; i++)
{
printf("%s %s ", s[i].sno, s[i].sname);
for (j = 0; j < 3; j++)
printf("%f ", s[i].score[j]);
printf("\n");
}
printf("%f ", s[i].score[j]);
printf("\n");
}

void delete(struct student s[], int n)//删除
{
int i, num;
num = 0;
char str[10];
printf("请输入你要删除数据的姓名:\n");
scanf_s("%s", str,10);//得到删除学生的姓名
for (i = 0; i < n; i++)//查找删除的学生的编号
{
if (strcmp(s[i].sname,str)==0)
{
num = i;
}
}

for (i = num; i < n; i++)//删除学生
{
    s[i - 1] = s[i];
}
print_student(s, n - 1);//输出删除后的结果

}

void modify(struct student s[], int n) // 修改
{
struct student num1[20];
printf("请输入要修改的学号:");
scanf_s("%s", num1, 20);
struct student t;

while (t.sno)
{
    if (t.sno == num1)
    {
        printf("%d\t%s\t%0.1f\n", t.sno, t.sname, t.score);
        printf("请输入新的姓名:");
        scanf_s("%s", t.sname, sizeof(t.sname));
        printf("请输入新的成绩:");
        scanf_s("%f %f %f", t.score[0],t.score[1],t.score[2]);

//赋值
s[i].sno = t.sno;
s[i].sname = t.sname;
s[i].score[0] = t.score[0];
s[i].score[1] = t.sc

有错误信息吗