我的代码提示用户输入用户想要从指针数组中删除的名称,然后通过链接列表搜索并删除名称。但我的代码是删除指针数组中的所有名称,除了数组中的最后一个。这是我的删除功能。
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");
}
答案 0 :(得分:1)
数组中的最后一个元素没有被删除,因为(*sPtr)->nextPtr
在该实例中为NULL并且while循环终止并且if ((*sPtr)->name == myStud.name)
没有被执行。
要解决此问题,您可以使用do while循环。在do while循环之前,您需要检查(* sPtr)是否为NULL
。