从链接列表中删除单个学生

时间:2016-09-23 23:35:20

标签: c linked-list

我无法使此功能正常工作。当我尝试删除特定记录时崩溃。我需要更改它才能按预期工作?

//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);
}

1 个答案:

答案 0 :(得分:1)

请注意,您正在查询pfirst,但通常不会在循环中更改pfirst。只有第一个元素是您的结果时,条件才会成立。另外,发现!= true总是为真,所以你必须在旅行列表之后最终得到一个pcurrent空指针,然后在引用pcurrrent-&gt;接下来,你炸弹。

我建议您逐步解决问题。

1)只需编写一个过程来打印每个元素,当指针为空时终止。您不需要找到变量。

2)重复编号#1,但要将其元素与其前任元素并排打印,要求您跟踪前一个元素。

3)掌握了#2之后,你会发现第一个元素是一个特例,如果没有访问调用函数所具有的信息,你就无法真正解决问题。