Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
328 views
in Technique[技术] by (71.8m points)

c - A problem with students and courses Linked List

I created a linked list of courses, and Im trying to write a function to create or update a linked list of students, but in this function I refer to my list of courses which is called "coursesList". but I get this error: "pointer to incomplete class type is not allowed" in the rows which are marked with "***". Can someone tell me what is the problem with my function?

struct Grade
{
    char courseNumber[6];
    char grade[4];
    struct Grade* next;
};


struct Student
{
    char studentName[20];
    struct Grade* studentGrades;
    struct student* next;
};


struct Course
{
    char courseNumber[6];
    char courseName[31];
    struct Course* next;
};


struct Student* updateStudentsList(char studentDetails[], struct Student* studentsList)
{
    int i = 0, j = 0, r = 0, k = 0, p = 0, c = 0, g = 0, bool = 1, isStudentExist = 1;
    char* studentName = " ";
    char* courseNumHolder = " ";
    char* gradeHolder = " ";
    struct Student* head = studentsList;
    if (studentsList == NULL)
    {
        studentsList = (struct Student*)malloc(sizeof(struct Student));
        if (studentsList == NULL)
            return studentsList;
        while (studentDetails[i] != ':')
        {
            studentsList->studentName[i] = studentDetails[i];
            i++;
        }
        studentsList->studentName[i] = '';
        studentsList->next = NULL;
        struct Grade* gradeHead = studentsList->studentGrades;
        while (studentDetails[i] != '
')
        {
            if (studentDetails[i] == ':' || studentDetails[i] == ';')
            {
                studentsList->studentGrades = (struct Grade*)malloc(sizeof(struct Grade));
                if (studentsList->studentGrades == NULL)
                    return studentsList;
                i++;
            }
            while (studentDetails[i] != ',')
            {
                studentsList->studentGrades->courseNumber[j] = studentDetails[i];
                i++;
                j++;
            }
            studentsList->studentGrades->courseNumber[j] = '';
            while (studentDetails[i] != ';')
            {
                studentsList->studentGrades->grade[r] = studentDetails[i];
                i++;
                r++;
            }
            studentsList->studentGrades->grade[r] = '';
            studentsList->studentGrades = studentsList->studentGrades->next;
        }
        studentsList->studentGrades = gradeHead;
        return studentsList;
    }
    else
    {
        while (studentDetails[i] != ':')
        {
            studentName[p] = (char)malloc(sizeof(char));
            studentName[p] = studentDetails[i];
            i++;
            p++;
        }
        studentName[p] = (char)malloc(sizeof(char));
        studentName[p] = '';
        while (studentDetails[i] != '
')
        {
            while (studentDetails[i] != ',')
            {
                courseNumHolder[c] = (char)malloc(sizeof(char));
                courseNumHolder[c] = studentDetails[i];
                c++;
                i++;
            }
            while (studentDetails[i] != ';')
            {
                gradeHolder[g] = (char)malloc(sizeof(char));
                gradeHolder[g] - studentDetails[i];
                g++;
                i++;
            }
            while (studentsList->next != NULL)
            {
                if (strcmp(studentName, studentsList->studentName) == 0)
                {
                    isStudentExist = 0;
                    while (studentsList->studentGrades != NULL)
                    {
                        if (strcmp(courseNumHolder, studentsList->studentGrades->courseNumber) == 0)
                        {
                            strcpy(studentsList->studentGrades->grade, gradeHolder);
                            bool = 0;
                        }
                        else if (studentsList->studentGrades->next == NULL && bool == 1)
                        {
                            studentsList->studentGrades->next = (struct Grade*)malloc(sizeof(struct Grade));
                            if (studentsList->studentGrades->next == NULL)
                                return studentsList;
                            strcpy(studentsList->studentGrades->next->courseNumber, courseNumHolder);
                            strcpy(studentsList->studentGrades->next->grade, gradeHolder);
                        }
                        studentsList->studentGrades = studentsList->studentGrades->next;
                    }
                }
                else if (studentsList->next == NULL && isStudentExist == 1)
                {
                    studentsList->next = (struct Student*)malloc(sizeof(struct Student));
                    if (***studentsList->***next == NULL)
                        return studentsList;
                    strcpy(***studentsList***->next->studentName, studentName);
                    studentsList->next->studentGrades = (struct Grade*)malloc(sizeof(struct Grade));
                    if (***studentsList-***>next->studentGrades == NULL)
                        return studentsList;
                    strcpy***(studentsList->***next->studentGrades->courseNumber, courseNumHolder);
                    strcpy(***studentsList-***>next->studentGrades->grade, gradeHolder);
                }
                studentsList = studentsList->next;

            }
            studentsList = head;
        }
    }
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Inside Student struct definition, your field next points to student instead of Student, so it's pointing to an undefined struct.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...