有没有大神看出来我这串代码问题到底出在了哪里啊?

#include<stdio.h>
#include<stdlib.h>
typedef struct STUDENT
{
    long ID;
    char classname[32];
    char name[32];
    float score[3];
    float ave;
 } student;
 void shuju(student stu[],int n);
 void average(student stu[],int n);
 int max(student stu[],int n);
 int main()
 {
     student stu[1204];
     int n;
     scanf("%d",&n);
     int i,a;
     shuju(stu,n);
     average(stu,n);
     
     for(i=0;i<n;i++)
     {
         printf("%s\n",stu[i].name);
         printf("%.1f\n",stu[i].ave);
      } 
    a = max(stu,n);  
      printf("%ld %s %s %.1f %.1f %.1f %.1f",stu[a].ID,stu[a].classname,stu[a].name,stu[a].score[0],stu[a].score[1],stu[a].score[2],stu[a].ave);
      printf("\n");
      return 0; 
 }
 void shuju(student stu[],int n)
 {
     int i,j;
     for(i=0;i<n;i++)
     {
         scanf("%ld%s%s",&stu[i].ID,&stu[i].classname,&stu[i].name);
         for(j=0;j<3;j++)
         {
             scanf("%f",&stu[i].score[j]);
         }
     }
 }
 void average(student stu[],int n)
 {
     int i,j,t;
     for(i=0;i<1;i++)
     {
     t=0;
     for(j=0;j<3;j++)
     {
         t+=stu[i].score[j];
      } 
      stu[i].ave=t*1.0/3;
 }
}
 int max(student stu[],int n)
 { 

     int i,m;
     float temp =stu[0].ave;
     
     for(i=0;i<n;i++)
     {
         if(stu[i].ave>temp)
         {
             temp=stu[i].ave;
             m=i;
         }
     }
     return m;
}
 

你自己写的shuju()中的scanf类型不匹配

什么意思啊

为什么你们新生都是盲打?让人怎么输入?没有 UserInterface,看不了。一天看下来太多了,是老师有问题,还是书本有问题。让人怎么学啊???例如你开头:

    int n = 0;
    printf("How many student? ");
    scanf("%d", &n);

要给提示,你要什么东西。

typedef struct STUDENT
{
    long ID;
    char classname[32];
    char name[32];
    float score[3];
    float ave;
 } student; // error: 跟 STUDENT 重名

这里很混乱也,一个就够。

typedef struct 
{
    long ID;
    char classname[32];
    char name[32];
    float score[3];
    float ave;
 } Student;
要那么多,干嘛?

你用的是 dynamic array,鸡动的,开玩笑!用户输入的。新的当然用 new 啦!用上面的 n 开档啦。

    Student *stu = new Student[n];

什么叫 shuju?输车吗。加多点 提示不会死的,要看官看得清清楚楚:

void shuju(Student stu[], int n)
{
    int i,j;
    for(i=0; i<n; i++)
    {
        printf("Plese enter Student id, classname, and name: ");
        scanf("%ld %s %s", &stu[i].ID, &stu[i].classname, &stu[i].name);

        for(j=0; j<3; j++)
        {
            printf("Plese enter score of %s: ", stu[i].name);
            scanf("%f", &stu[i].score[j]);
        }

        printf("You have entered: %.1f, %.1f, %.1f\n", stu[i].score[0], stu[i].score[1], stu[i].score[2]);
    }
}

结果如:

How many Student? 2
Plese enter Student id, classname, and name: 1234 3B FengZi
Plese enter score of FengZi: 33.4
Plese enter score of FengZi: 39.8
Plese enter score of FengZi: 40
You have entered: 33.4, 39.8, 40.0
Plese enter Student id, classname, and name: 3455 4C WuLiao
Plese enter score of WuLiao: 99.8
Plese enter score of WuLiao: 98.7
Plese enter score of WuLiao: 88.2
You have entered: 99.8, 98.7, 88.2

average 的 for loop 错了。

还有 t 是 float,不是 int。我加 Log,以后都这样干,自己看得舒服,错哪都知道。

void average(Student stu[], int n)
{
    int i, j;
    float t;
    for(i=0; i<n; i++)
    {
        t = 0.0;
        printf("Calculating %s\n", stu[i].name);

        for(j=0; j<3; j++)
        {
            printf("%d: t(%.1f) + %.1f = ", j+1, t, stu[i].score[j]);
            t = t + stu[i].score[j];
            printf("%.1f\t", t);
        } 
        printf("\n");

        stu[i].ave = t / 3;
        printf("\t avg: %.1f\n", stu[i].ave);
    }
}

结果:

Calculating FengZi
1: t(0.0) + 33.4 = 33.4 2: t(33.4) + 39.8 = 73.2        3: t(73.2) + 40.0 = 113.2
         avg: 37.7
Calculating WuLiao
1: t(0.0) + 99.8 = 99.8 2: t(99.8) + 98.7 = 198.5       3: t(198.5) + 88.2 = 286.7
         avg: 95.6

下面再加点招牌:

printf("\nStudents Record:\n");
    for(int i=0; i<n; i++)
    {
        printf("Student: %s\n",stu[i].name);
        printf("Average: %.1f\n",stu[i].ave);
    } 

    int a = max(stu, n);  

    printf("\nThe Best Student --\n");
    printf("Student ID: %ld\nClassname: %s\nName: %s\nSocres: %.1f\t %.1f\t %.1f\nAverage: %.1f\n",
        stu[a].ID,
        stu[a].classname,
        stu[a].name,
        stu[a].score[0],
        stu[a].score[1],
        stu[a].score[2],
        stu[a].ave);
    printf("\n");

结果就是:

Students Record:
Student: FengZi
Average: 37.7
Student: WuLiao
Average: 95.6

The Best Student --
Student ID: 3455
Classname: 4C
Name: WuLiao
Socres: 99.8     98.7    88.2
Average: 95.6