所以我试图用链表中 adds/subtracts 类 的菜单制作一个 c 程序......为什么这不起作用

So im trying to make a c program with a menu that adds/subtracts classes from a linked list... why does this not work

出现问题“current = head;”,“错误:无法在赋值中将 'course*' 转换为 'main()::node*'”

示例 运行 应如下所示: 你想学什么课程?

  1. 添加课程
  2. 放弃课程
  3. 打印时间表
  4. 退出 3个 您目前没有参加任何课程。

你想学什么课程?

  1. 添加课程
  2. 放弃课程
  3. 打印时间表
  4. 退出 1个 您要添加什么课程名称? Intro_to_C 您想添加什么课程编号? COP3223C 已添加!

你想学什么课程?

  1. 添加课程
  2. 放弃课程
  3. 打印时间表
  4. 退出 1个 您要添加什么课程名称? Computer_Science_1 您想添加什么课程编号? COP3502C 已添加!

你想学什么课程?

  1. 添加课程
  2. 放弃课程
  3. 打印时间表
  4. 退出 3个 课程安排:
  5. COP3223C - Intro_to_C
  6. COP3502C - 计算机 Science_1

你想学什么课程?

  1. 添加课程
  2. 放弃课程
  3. 打印时间表
  4. 退出 1个 您要添加什么课程名称? Concepts_in_Computer_Science 您想添加什么课程编号? COP2500C 已添加!

你想学什么课程?

  1. 添加课程
  2. 放弃课程
  3. 打印时间表
  4. 退出 3个 课程安排:
  5. COP2500C - Concepts_in_Computer_Science
  6. COP3223C - Intro_to_C
  7. COP3502C - 计算机 Science_1

你想学什么课程?

  1. 添加课程
  2. 放弃课程
  3. 打印时间表
  4. 退出 2个 您想删除什么课程代码? COP2100C 这门课程不在您的日程安排中。

你想学什么课程?

  1. 添加课程
  2. 放弃课程
  3. 打印时间表
  4. 退出 2个 您想删除什么课程代码? COP3223C 课程已被删除。

你想学什么课程?

  1. 添加课程
  2. 放弃课程
  3. 打印时间表
  4. 退出 3个 课程安排:
  5. COP2500C - Concepts_in_Computer_Science
  6. COP3502C - 计算机 Science_1

你想学什么课程?

  1. 添加课程
  2. 放弃课程
  3. 打印时间表
  4. 退出 4

完成!

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
//linked list of structs 


struct course {
    char name[31], number[11];
    struct course *next;
};
//prints the list


void printList(struct course *h) {
    struct course *temp = h;
    int num = 1;
    while (temp != NULL) {
        printf("%d. %s - %s\n", num, temp->number, temp->name);
        temp = temp->next;
    }
}

int contains(struct course *h, char code[11]) {
    struct course *temp = h;
    while (temp != NULL) {
        if (strcmp(temp->number, code)) {
            return 1;
        }
        temp = temp->next;
    }
    return 0;
}

int Menu() {
    printf("What courses would you like to do?\n1. Add Course\n2. Drop Course\n3. Print Schedule\n4. Exit\n");
    int value;
    scanf("%d", &value);
    return value;
}

int main() {

    struct course *head = NULL;
    struct node *current = NULL;
    int option = -1;
    while (option != 4) {
        option = Menu();
        if (option == 1) {
            //Add new course
            struct course *new_course = (struct course *) malloc(sizeof(struct course));
            printf("What course name would you like to add?\n");
            scanf("%s", new_course->name);
            printf("What course number would ypou like to add?\n");
            scanf("%s", new_course->number);
            new_course->next = NULL;
            if (head == NULL) {
                head = new_course;
            } else if (contains(head, new_course->number) == 1) {
                printf("Course has already been added.\n");
            } else {
                int flag = 0;
                if (strcmp(head->number, new_course->number) > 0) {
                    new_course->next = head;
                    head = new_course;
                    flag = 1;
                }
                current = head;
                while (current->next != NULL && flag == 0) {
                    if (strcmp(current->next->number, new_course->number) > 0) {
                        new_course->next = current->next;
                        current->next = new_course;
                        flag = 1;
                        break;
                    }
                    current = current->next;
                }
                // inserts at the end;
                if (flag == 0) {
                    current->next = new_course;
                }
            }
        } else if (option == 2) {
            //Remove course
            char remove[11];
            int flag = 0;
            printf("What element would you like to delete?\n");
            scanf("%s", remove);
            while (head != NULL && strcmp(head->number, remove) == 0) {
                head = head->next;
                flag = 1;
            }
            current = head;
            while (current != NULL && current->next != NULL) {
                if (strcmp(current->next->number, remove) == 0) {
                    current->next = current->next->next;
                    flag = 1;
                } else {
                    current = current->next;
                }
            }
            if (flag == 0) {
                printf("This course is not on the schedule.\n");
            } else {
                printf("The course has been deleted.");
            }
        } else if (option == 3) {
            //Print out schedule
            printList(head);

        }
        return 0;

    }

变量head的类型为struct course *,而变量current的类型为struct node *。由于它们是不同的类型,因此您不能将一个分配给另一个。

您可能想要创建 struct course * 类型的指针 current。所以你应该改变行

struct node *current = NULL;

至:

struct course *current = NULL;