结构体函数类型错误怎么办

求大佬帮忙看看哪里错了,是依据平均分来排序
#include "stdio.h"
struct student
{
char name[20];
int sno;
int score1;
int score2;
float averscore;
}edu[4]={{'刘灿',2021015442,90,95},{'张三',2021015443,85,95},{'李四',2021015442,90,90},{'王五',2021015442,90,85}};
int main()
{
struct student m;
int i;
for(i=0;i<=3;i++)
{
edu[i].averscore=(edu[i].score1+edu[i].score2)/2;
}
m=max(edu,4);
printf("%s\t%d\t%d\t%d\t%d\n",m.name,m.sno,m.score1,m.score2,m.averscore);
return 0;
}
struct student max(struct student x[],int length)
{
int i,j;
struct student t;
for(i=0;i<=length;i++)
for(j=i+1;j<=length;j++)
{
if(x[i].averscore<x[j].averscore)
{
t=x[i];
x[i]=x[j];
x[j]=t;
}
}
return(x[0]);
}

你题目的解答代码如下:

#include "stdio.h"
struct student
{
    char name[20];
    int sno;
    int score1;
    int score2;
    float averscore;
} edu[4] = {{"刘灿", 2021015442, 90, 95}, {"张三", 2021015443, 85, 95}, {"李四", 2021015442, 90, 90}, {"王五", 2021015442, 90, 85}};  //字符串要用双引号
struct student max(struct student x[], int length); //要在调用前面声明
int main()
{
    struct student m;
    int i;
    for (i = 0; i <= 3; i++)
    {
        edu[i].averscore = (edu[i].score1 + edu[i].score2) / 2.0;//除数改成浮点数
    }
    m = max(edu, 4);
    printf("%s\t%d\t%d\t%d\t%f\n", m.name, m.sno, m.score1, m.score2, m.averscore);//m.averscore是浮点数要用%f输出
    return 0;
}
struct student max(struct student x[], int length)
{
    int i, j;
    struct student t;
    for (i = 0; i < length; i++)
        for (j = i + 1; j < length; j++)
        {
            if (x[i].averscore < x[j].averscore)
            {
                t = x[i];
                x[i] = x[j];
                x[j] = t;
            }
        }
    return (x[0]);
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

有错误提示信息吗?
edu[4]={{'刘灿',2021015442,90,95},{'张三',2021015443,85,95},{'李四',2021015442,90,90},{'王五',2021015442,90,85}};
改为
edu[4]={{"刘灿",2021015442,90,95},{"张三",2021015443,85,95},{"李四",2021015442,90,90},{"王五",2021015442,90,85}};
字符串要用双引号,不是单引号

#include "stdio.h"
struct student
{
    char name[20];
    int sno;
    int score1;
    int score2;
    float averscore;
}edu[4]={{"刘灿",2021015442,90,95},{"张三",2021015443,85,95},{"李四",2021015442,90,90},{"王五",2021015442,90,85}};

struct student max(struct student x[],int length)
{
    int i,j;
    struct student t;
    for(i=0;i<length-1;i++)
        for(j=i+1;j<length;j++)
        {
            if(x[i].averscore<x[j].averscore)
            {
                t=x[i];
                x[i]=x[j];
                x[j]=t;
            }
        }
        return(x[0]);
}

int main()
{
    struct student m;
    int i;
    for(i=0;i<=3;i++)
    {
        edu[i].averscore=(edu[i].score1+edu[i].score2)/2.0;
    }
    m=max(edu,4);
    printf("%s\t%d\t%d\t%d\t%.1f\n",m.name,m.sno,m.score1,m.score2,m.averscore);
    return 0;
}