(C语言)结构体数组循环赋值问题

问题如下,后面附上的是我写的代码

img

img


我想问一下像这种情况怎么用for语句给结构体数组赋值呢?我不知道我写的代码有什么问题,求解答,感谢!

  1. 定义数组的时候用的N
    C语言一般是不允许这样定义数组
    数组的大小需要在运行程序之前指定,不能像这样输入N再定义N个元素的数组
    你可以在定义结构体数组的时候直接用一个比较大的数代替N
  2. 你的结构体成员设置为指针类型,这样的话需要使用malloc为其申请空间,否则不能正常执行
    你可以把指针改成字符数组类型

你写的结构体内的成员不能用指针,要用字符数组存放学号和姓名。

img

#include <stdio.h>
#include <string.h>
typedef struct
{
    char num[11];
    char name[11];
    int score1;
    int score2;
    int score3;
    double avg;
} stu;

void selSort(stu *arr, int n)
{
    int i, j, small;
    stu tmp;

    for (i = 0; i < n - 1; i++)
    {
        small = i;
        for (j = i + 1; j < n; j++)
        {
            if (arr[j].avg < arr[small].avg)
                small = j;
        }

        if (small != i)
        {
            tmp = arr[i];
            arr[i] = arr[small];
            arr[small] = tmp;
        }
    }
}

int main(int argc, char *argv[])
{
    int n;
    puts("输入学生个数:");
    scanf("%d", &n);
    stu st[n + 1];
    puts("输入各个学生的信息:");
    for (int i = 0; i < n; i++)
    {
        scanf("%10s%10s%d%d%d", st[i].num, st[i].name, &st[i].score1, &st[i].score2, &st[i].score3);
        st[i].avg = (st[i].score1 + st[i].score2 + st[i].score3) / 3.0;
    }

    selSort(st, n);
    puts("");
    for (int i = n - 1; i >= 0; i--)
    {
        printf("%s  %s  %.1lf\n", st[i].num, st[i].name, st[i].avg);
    }

    return 0;
}