关于表达式必须包含类类型,不允许指针指向不完整的类类型的问题

问题描述:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct grades {
    double math;
};
struct student
{
    char* name;
    struct gardes* grade;
};
int main()
{
    int i;
    int n;/*定义学生人数*/
    printf("please enter the numbers of students:\n");
    scanf("%d", &n);
    student* number = (student*)malloc(sizeof(student) * (n + 1));

    struct grades g;
    for (i = 0; i < n; i++)
    {
        if (((number + i)->name = (char*)calloc(n + 1, sizeof(char))) != NULL)
            printf("please enter the %d students\n", i + 1);
        printf("please enter the name:\n");
        scanf("%s", (number + i)->name);
        printf("please enter the math grades:\n");
        scanf("%lf", number->grade.math);
    }
        printf("the average is %lf\n", number->grade.math);


    free(number);
}

struct student
{
    char* name;
    struct gardes* grade;  //第一你单词拼错了,第二我不知道为啥写成struct grades*,

                                     //要么写grades* grade,main函数中中calloc空间,要么就不要用指针,直接写变量 grades grade;
};

改为

struct student
{
    char* name;
    grades grade;
};

 

完了之后

 scanf("%lf", number->grade.math);

改为

scanf("%lf", &(number->grade.math));    //并且功能上你应该加上i,最终改为scanf("%lf", &((number+i)->grade.math));