我无法使此功能正常工作。当我尝试删除特定记录时崩溃。我需要更改它才能按预期工作?
//Delete Students Function
void delete_single_Student(Student *pfirst, int id)
{
int search_id;
bool found = false;
Student *pcurrent = pfirst;
Student *temp = NULL;
printf("Please enter the student ID of the student that will be deleted.\n");
scanf("%d", &search_id);
while (search_id < 999 || search_id > 9999)
{
printf("\nPlease enter a valid id.\n");
scanf("%d", &search_id);
}
do
{
temp = pcurrent;
pcurrent = pcurrent->next;
if (pfirst->id == search_id)
{
found == true;
printf("**********************\n\n");
printf(" Student %d Deleted \n\n", search_id);
printf("*********************\n\n");
pfirst = pfirst->next;
free(temp);
break;
}
} while (found != true);
}
答案 0 :(得分:1)
请注意,您正在查询pfirst,但通常不会在循环中更改pfirst。只有第一个元素是您的结果时,条件才会成立。另外,发现!= true总是为真,所以你必须在旅行列表之后最终得到一个pcurrent空指针,然后在引用pcurrrent-&gt;接下来,你炸弹。
我建议您逐步解决问题。
1)只需编写一个过程来打印每个元素,当指针为空时终止。您不需要找到变量。
2)重复编号#1,但要将其元素与其前任元素并排打印,要求您跟踪前一个元素。
3)掌握了#2之后,你会发现第一个元素是一个特例,如果没有访问调用函数所具有的信息,你就无法真正解决问题。