结构体 输出学生信息 三科成绩和平均成绩 报错显示函数的调用是错误的 想问问怎么改


```c
//结构体
#include<stdio.h> 
struct student{
    char id[99];
    char name[99];
    int x;
    int y;
    int z;    
    float average;
}a[99];
float average(struct student ,int n ){
    for(int i=0;i<n;i++){
    a[i].average=(a[i].x+a[i].y+a[i].z)/3.0;
}

}

int main(){
    int i,n;
    float aver;
    struct student a[99];
    scanf("%d",&n);//输入学生个数
    for(i=0;i<n;i++){
        scanf("%s",a[i].id);
        scanf("%s",a[i].name);
        scanf("%d",&a[i].x);
        scanf("%d",&a[i].y);
        scanf("%d",&a[i].z);
    }
    for(i=0;i<n;i++){
        printf("%s",a[i].id);
        printf("%s",a[i].name);
        printf("%d",a[i].x);
        printf("%d",a[i].y);
        printf("%d",a[i].z);
    }
    aver=average(student,n);//显示这里错误
    printf("%f",aver);
    return 0;
}

```

首先你average传参第一个参数不对 你要传的是数组
第二你这没有返回值aver是个随机数(看你的逻辑不需要这个aver吧)
按照你结构体的定义这个average函数不需要返回值

#include<stdio.h> 
struct student{
    char id[99];
    char name[99];
    int x;
    int y;
    int z;    
    float average;
}a[99];
void average(struct student *a,int n ){
    for(int i=0;i<n;i++){
        a[i].average=(a[i].x+a[i].y+a[i].z)/3.0;
    }
}
int main(){
    int i,n;
    struct student a[99];
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%s",a[i].id);
        scanf("%s",a[i].name);
        scanf("%d",&a[i].x);
        scanf("%d",&a[i].y);
        scanf("%d",&a[i].z);
    }
    for(i=0;i<n;i++){
        printf("%s\t",a[i].id);
        printf("%s\t",a[i].name);
        printf("%d\t",a[i].x);
        printf("%d\t",a[i].y);
        printf("%d\n",a[i].z);
    }
    average(a,n);
    for(i=0;i<n;i++){
        printf("%f\n",a[i].average);
    }  
    return 0;
}

img

代码给你改了一下 你品品 有帮助的话 采纳一下

已经定义全局变量a[99]了,代码中就不要再定义其它学生信息数组了
student只是一个结构类型,又不是变量,肯定不能用来传递给函数作为参数,函数参数用student也是错误的

//结构体
#include<stdio.h> 
struct student{
    char id[99];
    char name[99];
    int x;
    int y;
    int z;    
    float average;
}a[99];
float average(int n ){
    for(int i=0;i<n;i++){
    a[i].average=(a[i].x+a[i].y+a[i].z)/3.0;
}
}
int main(){
    int i,n;
    float aver;
    scanf("%d",&n);//输入学生个数
    for(i=0;i<n;i++){
        scanf("%s",a[i].id);
        scanf("%s",a[i].name);
        scanf("%d",&a[i].x);
        scanf("%d",&a[i].y);
        scanf("%d",&a[i].z);
    }
    for(i=0;i<n;i++){
        printf("%s ",a[i].id);
        printf("%s ",a[i].name);
        printf("%d ",a[i].x);
        printf("%d ",a[i].y);
        printf("%d\n",a[i].z);
、
    }
    aver=average(n);
    printf("%f",aver);
    return 0;
}

请问那个那个*a是什么意思