C语言局部函数定义非法和遇到意外的文件结尾的问题

局部函数定义非法和遇到意外的文件结尾的情况 ,我不知道哪里有问题,谢谢大佬

#include<stdio.h>
#include<stdlib.h>


#define NUM 20  //学生人数
#define NL 20   //名字字节长度

typedef struct student{//定义一个结构体

	const char *name[NL];
	const char *id[NUM];
    float ach[3];
//Computer programming
//Physical Education
//Communication and Research
	float sum;
	float avg;
}STU;

STU stu[NUM];
int itemSelected=-1;

int Menu();//菜单
void chose(int itemSelected);//选择
void inputScore();//输入分数
void AverofS();//每名学生总分和平均分
void findByNum();
void findByName();
void printScore();

void main(){

    while(1){
    itemSelected=Menu();
    chose(itemSelected);
    itemSelected=-1;
    }

}


int Menu(){
    int itemSelected;
    system("cls");
    printf("\n ==============Student achievement management system===============\n");
    printf("\t 1.Input student number, name and scores of each subject\n");
    printf("\t 2.Display student information\n");
    printf("\t 3.Calculate the total score and bureau score of each student\n");
    printf("\t 4.Query student ranking and examination results by student number\n");
    printf("\t 5.Search student rankings and grades by name\n");
    printf("\t 0.END\n");
    printf("===============================================\n");
    
	printf("Please select an option:");
    scanf("%d",&itemSelected);
    return itemSelected;
}

void chose(int itemSelected){
    switch(itemSelected){
    case 1: inputScore(); break;
    case 2: printScore();break;
    case 3: AverofS();break;
    case 4: findByNum();break;
    case 5: findByName();break;
    case 0: exit(0);
        printf("About to exit the program");break;
    default: printf("Input error!");break;
    }
}



void inputScore (){
	int i;
	printf("\n===============================================\n");
    printf("Please input student number, name and subject information(Enter 0 to stop information input)\n");
	for(i=0;i<NUM;i++){
        printf("Student ID(zy00*)\n");
        scanf("%s",&stu[i].id);
        if(stu[i].id==0) break;
        getchar();//Absorb extra line breaks
        printf("name\n");
        scanf("%s",stu[i].name);
        printf("Please input the score of each subject\n");
        stu[i].sum=0;
        for(int j =0;j<3;j++){
            scanf("%f",&stu[i].ach[j]);
            stu[i].sum +=stu[i].ach[j];
       	}
	}

}


void printScore(){
	int m=0;
    float sum[NUM]={0};
    float average[NUM]={0};
    for (int i=0;i<NUM;i++){
        for(int j=0;j<3;j++){
            sum[i]+=stu[i].ach[j];
        }
        average[i]=sum[i]/3;

    printf("==============Here is the student information==============");
    for(int z=0;z<NUM;z++){
        printf("The student's student number is:%d\n",stu[z].id);
        printf("The student's name is:");
        for(int k=0;k<NL;k++){
            printf("%c",stu[z].name[k]);
        }
        printf("\nThe student's scores in various subjects are\n");
        for(int c=0;c<m;c++){
            printf("The result of the %dcourse is %.2f\n",c+1,stu[z].ach[c]);
        }
        printf("The student's total score is:%.2f",stu[z].sum);
        printf("\nThe average score is%.2f",average[i]);
		printf("\n");
    }
    getch();
}


void AverofS (){
    float sum[NUM]={0};
    float average[NUM]={0};
    for (int i=0;i<n;i++){
        for(int j=0;j<3;j++){
            sum[i]+=stu[i].arc[j];
        }
        average[i]=sum[i]/3;
        printf("The total score of Student%dis:%.2f,The average score is%.2f\n",i+1,sum[i],average[i]);
    }
    getch();
}


void findByNum() {
	int is_find=0;
    char find[NUM];
    //记录需要查找的学号,并作为查找成功与否的标识符
    printf("Please enter the name you want to find:");
    getchar();
    gets(find);
    for(int i=0;i<n;i++){
        if(strcmp(stu[i].id,find)==0){
            printf("\nSearch success\n");
	        printf("The student's student number is:%d\n",stu[j].id);
            printf("The student's name is:");
            for(int k=0;k<NL;k++){
                printf("%c",stu[i].name[k]);
			}
            printf("\nThe student's scores in various subjects are\n");
            for(int c=0;c<m;c++){
                printf("The result of the %dcourse is %.2f\n",c+1,stu[i].arc[c]);
			}
            printf("The student's total score is:%.2f",stu[i].sum);
            printf("\n");
            is_find=1;
		}
	}
    if(is_find!=1){
        printf("There is no such person\n");

    }
    getch();
}



void findByName() {
	int is_find=0;
    char find[NUM];
    //记录需要查找的姓名,并作为查找成功与否的标识符
    printf("Please enter the name you want to find:");
    getchar();
    gets(find);
    for(int i=0;i<n;i++){
        if(strcmp(stu[i].name,find)==0){
            printf("\nSearch success\n");
	        printf("The student's student number is:%d\n",stu[i].id);
            printf("The student's name is:");
            for(int k=0;k<NL;k++){
                printf("%c",stu[i].name[k]);
			}
            printf("\nThe student's scores in various subjects are\n");
            for(int c=0;c<m;c++){
                printf("The result of the %dcourse is %.2f\n",c+1,stu[i].arc[c]);
			}
            printf("The student's total score is:%.2f",stu[i].sum);
            printf("\n");
            is_find=1;
		}
	}
    if(is_find!=1){
        printf("There is no such person\n");

    }
    getch();

}

 

已经改好并且能正常运行了,小错误很多啊

#include<stdio.h>
#include<stdlib.h>
#include <conio.h>
#include <string.h>

#define NUM 20  //学生人数
#define NL 20   //名字字节长度
typedef struct student{//定义一个结构体
	char name[NL];
	char id[NUM];
	float ach[3];
	//Computer programming
	//Physical Education
	//Communication and Research
	float sum;
	float avg;
}STU;
STU stu[NUM];
int itemSelected=-1;
int Menu();//菜单
void chose(int itemSelected);//选择
void inputScore();//输入分数
void AverofS();//每名学生总分和平均分
void findByNum();
void findByName();
void printScore();
void main()
{
	while(1)
	{
		itemSelected=Menu();
		chose(itemSelected);
		itemSelected=-1;
	}
}

int Menu()
{
	int itemSelected;
	system("cls");
	printf("\n ==============Student achievement management system===============\n");
	printf("\t 1.Input student number, name and scores of each subject\n");
	printf("\t 2.Display student information\n");
	printf("\t 3.Calculate the total score and bureau score of each student\n");
	printf("\t 4.Query student ranking and examination results by student number\n");
	printf("\t 5.Search student rankings and grades by name\n");
	printf("\t 0.END\n");
	printf("===============================================\n");
	printf("Please select an option:");
	scanf("%d",&itemSelected);
	return itemSelected;
}
void chose(int itemSelected)
{
	switch(itemSelected){
	case 1: inputScore(); break;
	case 2: printScore();break;
	case 3: AverofS();break;
	case 4: findByNum();break;
	case 5: findByName();break;
	case 0: exit(0);
		printf("About to exit the program");break;
	default: printf("Input error!");break;
	}
}

void inputScore ()
{
	int i;
	printf("\n===============================================\n");
	printf("Please input student number, name and subject information(Enter 0 to stop information input)\n");
	for(i=0;i<NUM;i++)
	{
		printf("Student ID(zy00*)\n");
		scanf("%s",stu[i].id);
		if(strlen(stu[i].id) > 0 && stu[i].id[0]=='0') 
			break;
		getchar();//Absorb extra line breaks
		printf("name\n");
		scanf("%s",stu[i].name);
		printf("Please input the score of each subject\n");
		stu[i].sum=0;
		for(int j =0;j<3;j++)
		{
			scanf("%f",&stu[i].ach[j]);
			stu[i].sum +=stu[i].ach[j];
		}
	}
}

void printScore(){
	float sum[NUM]={0};
	float average[NUM]={0};
	for (int i=0;i<NUM;i++)
	{
		for(int j=0;j<3;j++)
		{
			sum[i]+=stu[i].ach[j];
		}
		average[i]=sum[i]/3;
	}
	printf("==============Here is the student information==============");
	for(int z=0;z<NUM;z++)
	{
		printf("The student's student number is:%s\n",stu[z].id);
		printf("The student's name is:%s",stu[z].name);
		printf("\nThe student's scores in various subjects are\n");
		for(int c=0;c<3;c++)
		{
			printf("The result of the %dcourse is %.2f\n",c+1,stu[z].ach[c]);
		}
		printf("The student's total score is:%.2f",stu[z].sum);
		printf("\nThe average score is%.2f",average[z]);
		printf("\n");
	}
	getch();
}

void AverofS ()
{
	float sum[NUM]={0};
	float average[NUM]={0};
	for (int i=0;i<NUM;i++)
	{
		for(int j=0;j<3;j++)
		{
			sum[i]+=stu[i].ach[j];
		}
		average[i]=sum[i]/3;
		printf("The total score of Student%dis:%.2f,The average score is%.2f\n",i+1,sum[i],average[i]);
	}
	getch();
}

void findByNum() 
{
	int is_find=0;
	char find[NUM];
	//记录需要查找的学号,并作为查找成功与否的标识符
	printf("Please enter the name you want to find:");
	getchar();
	gets(find);
	for(int i=0;i<NUM;i++)
	{
		if(strcmp(stu[i].id,find)==0)
		{
			printf("\nSearch success\n");
			printf("The student's student number is:%s\n",stu[i].id);
			printf("The student's name is:");
			printf("%s",stu[i].name);
			printf("\nThe student's scores in various subjects are\n");
			for(int c=0;c<3;c++)
			{
				printf("The result of the %d course is %.2f\n",c+1,stu[i].ach[c]);
			}
			printf("The student's total score is:%.2f",stu[i].sum);
			printf("\n");
			is_find=1;
		}
	}
	if(is_find!=1)
	{
		printf("There is no such person\n");
	}
	getch();
}

void findByName() 
{
	int is_find=0;
	char find[NUM];
	//记录需要查找的姓名,并作为查找成功与否的标识符
	printf("Please enter the name you want to find:");
	getchar();
	gets(find);
	for(int i=0;i<NUM;i++)
	{
		if(strcmp(stu[i].name,find)==0)
		{
			printf("\nSearch success\n");
			printf("The student's student number is:%s\n",stu[i].id);
			printf("The student's name is:");
			printf("%s",stu[i].name);
			printf("\nThe student's scores in various subjects are\n");
			for(int c=0;c<3;c++)
			{
				printf("The result of the %d course is %.2f\n",c+1,stu[i].ach[c]);
			}
			printf("The student's total score is:%.2f",stu[i].sum);
			printf("\n");
			is_find=1;
		}
	}
	if(is_find!=1)
	{
		printf("There is no such person\n");
	}
	getch();
}

 

1)getCh的库函数,未引用正确的头文件,答主的conio.h很正确;

2) AverofS()函数for循环时n未定义,findbyName & findByNum有同样的问题,应该有更具体的提示才对;

3)所有的{}不对等,建议你按照第一个答主的代码,采用换行和缩进,这样代码整齐,而且便于观察漏了哪个括号;

4)第一个答主答案挺好的,可以采纳;

可以根据error c2056,在搜索查错误