我需要这段代码的帮助

时间:2016-04-18 19:10:32

标签: c linked-list

我的代码提示用户输入用户想要从指针数组中删除的名称,然后通过链接列表搜索并删除名称。但我的代码是删除指针数组中的所有名称,除了数组中的最后一个。这是我的删除功能。

int delete (studPtr *sPtr, Student myStud)
{

    studPtr previous = NULL;
    studPtr current = NULL;
    studPtr temp = NULL;
    while ((*sPtr)->nextPtr != NULL)
    {
        //previous = *sPtr;

        if ((*sPtr)->name == myStud.name)
        {
            temp = *sPtr;
            (*sPtr) = (*sPtr)->nextPtr;
            current = (*sPtr);
            previous->nextPtr = current;
            free(temp);

        }
        else
        {
            previous = *sPtr;
            (*sPtr) = (*sPtr)->nextPtr;
        }


    }
    return 1;


}

这是我的指针数组

char *studentname[] = { "Abbie", "Oakley", "Sylvia", "Uwe", "Ken", "Aaron", "Fabien",'\0' };

这会调用该函数。

printf("Enter students name: \n");
scanf("%s", Stud.name);
int convert_char = determineIfConvert(Stud.name);
if (convert_char == 1)
{
    convert(Stud.name);
}
int delete_student = delete(&startPtr, Stud);
if (delete_student == 1)
{
    printf("student deleted");
    printList(startPtr);
}
else
{
    printf("student not found\n");
}

1 个答案:

答案 0 :(得分:1)

数组中的最后一个元素没有被删除,因为(*sPtr)->nextPtr在该实例中为NULL并且while循环终止并且if ((*sPtr)->name == myStud.name)没有被执行。 要解决此问题,您可以使用do while循环。在do while循环之前,您需要检查(* sPtr)是否为NULL