输入输出学生成绩与哥德巴赫猜想整合在一起的程序

#include<stdio.h>
#include<math.h>
struct student{
char number[5];
char name[5];
int score[3];
int average;
};
int main ()
{
struct student person[100];
char t;//t为菜单数
void score(struct student person[100]);
printf(" 主菜单 \n");
printf("-------------------------------------------------------------------------------\n");
printf("------------------| 1输入输出学生成绩 | | 2验证哥德巴赫猜想 | | 3退出 |-----------------\n");

while(t!='3')
{
    printf("请输入主菜单中的一个数字:\n");
    scanf("%c",&t);
    switch(t)
    {
        case '1': score(person); break;
        case '2': Goldbach(); break;
        default: printf("数据错误!\n");break;
    }
}
if(t=='3')
    printf("按回车键结束:\n");
scanf("%c",&t);
return 0;

}
void score(struct student person[100])
{
int k,m;//k为子菜单数字,m为学生数量
void input(struct student person[100],int m);
void output(struct student person[100],int m);
void sort(struct student person[100],int m);

printf("下面是输入输出学生成绩:\n");
printf("                                   子菜单1                                 \n");
printf("---------------------------------------------------------------------------\n");
printf("| 1输入学生信息 | | 2输出学生成绩 | | 3平均成绩排序 | | 4搜索学生成绩 | | 5修改学生成绩 | | 6退出 |\n");
printf("请先输入学生数量:\n");
scanf("%d",&m);
printf("请输入子菜单1中的一个数字:\n");
scanf("%d",&k);
while(k!=6)
{

 switch(k)
    {
        case 1:input(person,m);break;
        case 2:output(person,m);break;
        case 3:printf("1\n");
    }
}

}
void input(struct student person[100],int m)
{
int i;

for(i=0;i<m;i++)
{
    printf("请输入第%d位学生的学号、姓名、成绩1、成绩2、成绩3\n",i+1);
    scanf("%s%s%d%d%d",&person[i].number,&person[i].name,&person[i].score[0],&person[i].score[1],&person[i].score[2]);
}
printf("按回车键返回\n");

}
void output(struct student person[100],int m)
{

int i;
int average(int i,struct student person[100]);
printf("学号  |  姓名  |  成绩1  |  成绩2  |  成绩3  |  平均成绩 \n");
    printf("-------------------------------------------------------\n");
    for(i=0;i<m;i++)
    {
        person[i].average=average(i,person);
        printf("%s    %s    %d    %d     %d     %d \n",person[i].number,person[i].name,person[i].score[0],person[i].score[1],person[i].score[2],person[i].average);
    }

}
int average(int i,struct student person[100])
{
int j,sum=0;
for(j=0;j<3;j++)
{
sum+=person[i].score[j];
}
person[i].average=sum/3;
return person[i].average;
}
void sort(struct student person[100],int m)
{
int i,j;
struct student *temp,*p=person;
for(i=0;i<m;i++)
for(j=0;j<m-i-1;j++)
{
p++;
if(person[i].average<person[i+1].average)
{
*temp=*p;
p=(p+1);
*(p+1)=*temp;
}
}
for(i=0;i<m;i++)
printf("1\n");
}

int Goldbach()
{
char q;//子菜单2数
int i;
long int n;//哥德巴赫猜想的数字
int prime(long int p);
printf("下面是验证哥德巴赫猜想:\n");
printf("----------------------------------子菜单2------------------------------------\n");
printf(" | 1输入数字并验证 | | 2继续验证 | | 3退出 | \n");
printf("请输入子菜单2中的一个数字:\n");
scanf("%c",&q);
while(q!='3')
{

    switch(q)
    {
        case '1':
        {
            printf("请输入要验证的正整数:\n");
            scanf("%ld",&n);
            if(n%2!=0||n<=2||n>2000000000)//规定n的范围
                printf("输入错误!\n");
            else
            {
                for(i=2;i<n;i++)
                {
                    if(prime(i)&&prime(n-i)&&i<(n-i))
                    {
                        printf("%d=%d+%d\n",n,i,n-i);break;
                    }
                }
            }
        };break;
        case '2':break;
        default:printf("数据错误!\n");break;
    printf("请选择退出或者再次验证:\n");
    scanf("%c",&q);
}
if(q=='3')
{
    printf("按回车键返回\n");
}
scanf("%c",&q);
return 0;

}
int prime(long int p)
{
int i;
for(i=2;i<sqrt(p);i++)
{
if(p%i==0)
return 0;
}
return 1;
}

img

一直报错咋办,调试了一上午了越改错误越多,请各位大佬指点,错误的地方就是在prime那个函数开始的地方