我寫了下面這段代碼:(上面的結構和下面的函數) 我試着用這個函數註冊一個學生並刪除他。卡住了鏈表
void reg_student(slist *students, clist *courses, int id, int number){
slist *temp;
clist*temp1;
student *reg;
course *addit;
for (temp = students; temp->info->id!=id; temp = temp->next);
reg = temp->info;// the student we want to register.
for (temp1 = courses; temp1->info->number != number; temp1 = temp1->next);
addit = temp1->info;//the course to add.
//adding the course to the student courses list.
reg->courses = add_course(reg->courses, addit->title, addit->number);
//adding the student to the course students list.
addit->students = add_student(addit->students, reg->name, reg->id);
void unreg_student(slist *students, int id, int number){
slist *temp;
clist *temp1;
student *studenttoremove;
course *coursetoremove;
for (temp = students; temp->info->id != id; temp = temp->next);
studenttoremove = temp->info;// the student we want to delete.
for (temp1 = studenttoremove->courses; temp1->info-> number != number; temp1 = temp1->next);
coursetoremove = temp1->info;//the course we want to delete.
studenttoremove->courses = remove_course(studenttoremove->courses, coursetoremove);
temp1->info->students = remove_student(temp1->info->students, studenttoremove);
}
slist* remove_student(slist*students, student* s1){
slist* temp=students,*temp1;
if (temp->info == s1){
if (!(temp->next)){
free(temp);
return NULL;
}
temp1 = temp->next;
free(temp);
return temp1;
}
for (temp = students; temp->next->info != s1; temp = temp->next);
temp1 = temp->next;
temp = temp1->next;
free(temp1);
return students;
}
clist* remove_course(clist*courses, course * c1){
clist* temp=courses, *temp1;
if (temp->info == c1){
if (!(temp->next)){
free(temp);
return NULL;
}
temp1 = temp->next;
free(temp);
return temp1;
}
for (temp = courses; temp->next->info != c1; temp = temp->next);
temp1 = temp->next;
temp = temp1->next;
free(temp1);
return courses;
}
`的結構是:
typedef struct course {
char *title;
int number;
struct slist *students;
} course;
typedef struct slist {
student *info;
struct slist *next;
} slist;
typedef struct clist {
course *info;
struct clist *next;
} clist;
這些功能應該添加和刪除學生和課程。 該寄存器工作正常。但是當我試圖刪除學生時,課程將從學生課程列表中刪除,但學生不會從課程列表中刪除。當我調試它時,我看到刪除函數獲得一個NULL作爲學生名單..我不明白爲什麼。 謝謝。
你爲什麼標籤C#時,這是C或C++? –
幾個小時前你問了這個確切的問題,你已經明確指示使用適當的語言標籤。爲什麼你沒有按照建議改進質量就重複了這個問題? – PoweredByOrange
它是C++ - 它絕對不是c# – Cadburry