request for member 'name' in 'stu'

我的代码遇到这样的问题 我不知道如何处理 我很疑惑 我也没有设置指针变量啊
“在“stu”中请求成员“name”,它是指针类型“stu*”(可能您想使用“->”?)”

#include<stdio.h>
struct STU{
    int num;
    char name[20];
    int score[3];
    int ave;
}stu[10];

int main()
{
     void input(struct STU stu[10]);
     void aver(struct STU stu[10]);
     void out_data(struct STU stu[10]);
     void out(struct STU stu[10]);
     input(stu);
     aver(stu);
     out_data(stu);
     out(stu);
     
      
}
void input(struct STU stu[10])
{
    for(int i=0;i<10;i++)
    scanf("%d  %s %d %d %d",&stu.num,stu.name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
}
void aver(struct STU stu[10])
{ 
    int pj=0,psum=0;
    for(int j=0;j<10;j++)
    {
        stu[j].ave=(stu[j].score[0]+stu[j].score[1]+stu[j].score[2])/3;
    }

}
void  out_data(struct STU stu[10])
{
    for(int i=0;i<10;i++)
    {
        printf("%4d%4s%",stu[i].num,stu[i].name);
        printf("4d%4d%4d%4d\n",stu[i].score[0],stu[i].score[1],stu[i].score[2]);
    }
}
void out(struct STU stu[10])
  {
      struct STU max=stu[0];
    struct STU min=stu[0];
    for(int i=0;i<10;i++)
    {
        if(max.ave<stu[i].ave)
             max=stu[i];
            
           if(min.ave>stu[i].ave)
                min=stu[i];
    }
    printf("max:%d\n",max.ave);
        printf("min:%d",min.ave);
  }


运行结果:

img

stu.num这里的stu不就是指针么,你应该是想写stu[i].num吧?

注意函数传参,你想传递一个数组的话,不能这样写啊,你知道数组有用下标取对象的说法 stu[10]这不是数组对象了,这是下标为10的一个对象了,吧stu[10]当成了参数名了吧。 你应该写成 struct STU stu[] 或者用指针传参吧

img

void input(struct STU stu[10])
{
    for(int i=0;i<10;i++)
    scanf("%d  %s %d %d %d",&stu.num,stu.name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
}

参数stu是一个数组,在函数中退化为STU*指针了,所以你不能访问stu.num,你只能写成stu[i].num。我觉得你想写的是:

void input(struct STU stu[10])
{
    for(int i=0;i<10;i++)
    scanf("%d  %s %d %d %d",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
}