我的程序错误怎么改,下面说local function definitions are illegal和unexpected end of file found

#include <stdio.h>
#include <stdlib.h>
#define SIZE 30 //成绩数组总长度
#define SEGMENTSIZE 11 //分数段总共有0-10,总计11个段
#define FAILURE -1 //返回失败结果
#define SUCCESS 1 //返回成功结果
#define ASCEND 1 //升序
#define DECEND -1 //降序

void main()
{
//注:数组中有25个学生分数,其中最一个-1表示该元素之前的数组元素值为有效分数。
int score[SIZE] = { 78,65,23,34,56,87,90,100,45,88,54,95,63,66,89,54,64,77,63,56,0,86,97,94,30,-1 };//给score[1]到score[25]赋初值。
int i;
int scoreSegment[SEGMENTSIZE] = { 0 };//此数组用于存放统计各分数段的人数,分数段为0-10
int stuNumber, maxScore, minScore, searchArrayPosition;
int searchScore, appendScoreNum, insertScoreNum, result, arrayPossition;
int order;//排序方向
float averageScore, medianScore;
enum Status { GAMEOVER, CONTINUE };
int choiceNum;
enum Status gameStatus;

do
{

    gameStatus = CONTINUE;
    printf("\n\t\t学  生  成  绩  管  理  系  统  1.3 \n\t\t\tDesigned by HuangX\n");
    printf("\n\t1.统计学生数\t\t\t2.统计分数段人数\n\n");
    printf("\t3.统计最高分\t\t\t4.统计最低分\n\n");
    printf("\t5.统计平均分\t\t\t6.统计中值\n\n");

    scanf("%d", &choiceNum);
    fflush(stdin);//清除键盘缓冲区的数,否则当输入字符时会出现死循环

    switch (choiceNum)
    {
    case 0:
        gameStatus = GAMEOVER;
        break;
    case 1:
        int countStuNum(int array[], int length)
        {
        int i, stuNumber = 0;
        for (i = 0; i<length; i++)
        if (array[i] != -1) stuNumber++; //因为数组的结尾是-1,统计非-1的个数
        else break;
        return stuNumber;

        } //countStuNum(int array[],int length)
    
    case 2:
    void countScoreSegment(int array[], int Len, int segment[], int segmentLen)
    {

//柱状显示各分类段的人数
    printf("\n\t2. 统计显示各分类段的人数\n");
    break;



    }//end countScoreSegment(int array[],int len)
    case 3:
    int countMaxScore(int array[], int len)
    {
    int max = 100;

    return max;
    break;

    }  //countMaxScore(int array[],int len)
    case 4:
    int countMinScore(int array[], int len)
    {
    int min = 0;

    return min;
    break;

    }//end countMinScore(int array[],int len)
    case 5:
    float countAverageScore(int array[], int len)
    {
    int i, sum = 0;

    return (float)sum / len;
    break;

    }//end countAverageScore

}

}

末尾缺个花括号
case里函数提出去,放到main外面,在case里通过函数名调用。

大概改了下

#include <stdio.h>
#include <stdlib.h>
#define SIZE 30 //成绩数组总长度
#define SEGMENTSIZE 11 //分数段总共有0-10,总计11个段
#define FAILURE -1 //返回失败结果
#define SUCCESS 1 //返回成功结果
#define ASCEND 1 //升序
#define DECEND -1 //降序

int countStuNum(int array[], int length)
{
    int i, stuNumber = 0;
    for (i = 0; i < length; i++)
        if (array[i] != -1)
            stuNumber++; //因为数组的结尾是-1,统计非-1的个数
        else break;
    printf("stuNumber:%d\n", stuNumber);
    return stuNumber;
}

void countScoreSegment(int array[], int Len, int segment[], int segmentLen)
{
    //柱状显示各分类段的人数
    printf("\n\t2. 统计显示各分类段的人数\n");
}

int countMaxScore(int array[], int len)
{
    int max = 0;
    for(int i = 0; i < len; i++)
    {
        if(array[i] >= max)max = array[i];
    }

    printf("MAX:%d\n", max);

    return max;
}

int countMinScore(int array[], int len)
{
    int min = 101;
    for(int i = 0; i < len; i++)
    {
        if(array[i] <= min)min = array[i];
    }

    printf("MIN:%d\n", min);

    return min;
}

float countAverageScore(int array[], int len)
{
    float ave, sum = 0;
    for(int i = 0; i < len; i++)
    {
        sum += array[i];
    }
    ave = sum / len;
    printf("AVE:%f\n", ave);

    return ave;
}

int main()
{
    

    //注:数组中有25个学生分数,其中最一个-1表示该元素之前的数组元素值为有效分数。
    int score[SIZE] = { 78, 65, 23, 34, 56, 87, 90, 99, 45, 88, 54, 95, 63, 66, 89, 54, 64, 77, 63, 56, 5, 86, 97, 94, 30, -1 }; //给score[1]到score[25]赋初值。
    int i;
    int scoreSegment[SEGMENTSIZE] = { 0 };//此数组用于存放统计各分数段的人数,分数段为0-10
    int stuNumber, maxScore, minScore, searchArrayPosition;
    int searchScore, appendScoreNum, insertScoreNum, result, arrayPossition;
    int order;//排序方向
    float averageScore, medianScore;
    enum Status { GAMEOVER, CONTINUE };
    int choiceNum;
    enum Status gameStatus;
 
    int len = 0;
    do
    {

        gameStatus = CONTINUE;
        printf("\n\t\t学  生  成  绩  管  理  系  统  1.3 \n\t\t\tDesigned by HuangX\n");
        printf("\n\t1.统计学生数\t\t\t2.统计分数段人数\n\n");
        printf("\t3.统计最高分\t\t\t4.统计最低分\n\n");
        printf("\t5.统计平均分\t\t\t6.统计中值\n\n");

        scanf("%d", &choiceNum);
        fflush(stdin);//清除键盘缓冲区的数,否则当输入字符时会出现死循环

        switch (choiceNum)
        {
        case 0:
            gameStatus = GAMEOVER;
            return 1;
        case 1:
            len = countStuNum( score,  SIZE);
            break;
        case 2:
            countScoreSegment(score,  len, scoreSegment, SEGMENTSIZE);
            break;
        case 3:
            countMaxScore( score,  len);
            break;
        case 4:
            countMinScore( score,  len);
            break;
        case 5:
            countAverageScore(score,  len);
            break;
        default:
            printf("输入错误,重新输入!\n");
            break;
        }
    }
    while(1);
    return 0;
}