所以我试图用链表中 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*'”
示例 运行 应如下所示:
你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出
3个
您目前没有参加任何课程。
你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出
1个
您要添加什么课程名称?
Intro_to_C
您想添加什么课程编号?
COP3223C
已添加!
你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出
1个
您要添加什么课程名称?
Computer_Science_1
您想添加什么课程编号?
COP3502C
已添加!
你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出
3个
课程安排:
- COP3223C - Intro_to_C
- COP3502C - 计算机 Science_1
你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出
1个
您要添加什么课程名称?
Concepts_in_Computer_Science
您想添加什么课程编号?
COP2500C
已添加!
你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出
3个
课程安排:
- COP2500C - Concepts_in_Computer_Science
- COP3223C - Intro_to_C
- COP3502C - 计算机 Science_1
你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出
2个
您想删除什么课程代码?
COP2100C
这门课程不在您的日程安排中。
你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出
2个
您想删除什么课程代码?
COP3223C
课程已被删除。
你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出
3个
课程安排:
- COP2500C - Concepts_in_Computer_Science
- COP3502C - 计算机 Science_1
你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出
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;
出现问题“current = head;”,“错误:无法在赋值中将 'course*' 转换为 'main()::node*'”
示例 运行 应如下所示: 你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出 3个 您目前没有参加任何课程。
你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出 1个 您要添加什么课程名称? Intro_to_C 您想添加什么课程编号? COP3223C 已添加!
你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出 1个 您要添加什么课程名称? Computer_Science_1 您想添加什么课程编号? COP3502C 已添加!
你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出 3个 课程安排:
- COP3223C - Intro_to_C
- COP3502C - 计算机 Science_1
你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出 1个 您要添加什么课程名称? Concepts_in_Computer_Science 您想添加什么课程编号? COP2500C 已添加!
你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出 3个 课程安排:
- COP2500C - Concepts_in_Computer_Science
- COP3223C - Intro_to_C
- COP3502C - 计算机 Science_1
你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出 2个 您想删除什么课程代码? COP2100C 这门课程不在您的日程安排中。
你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出 2个 您想删除什么课程代码? COP3223C 课程已被删除。
你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出 3个 课程安排:
- COP2500C - Concepts_in_Computer_Science
- COP3502C - 计算机 Science_1
你想学什么课程?
- 添加课程
- 放弃课程
- 打印时间表
- 退出 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;