【发布时间】:2021-07-23 13:45:43
【问题描述】:
我想做以下事情:应该可以删除具有指定名称的动物。如果存在更多同名动物,则应删除所有同名动物
我在 main.c 中的代码:
case 3: //Remove Animal
printf ("remove Animal\n");
char animalName[MaxNameLength];
printf("Animal name to delete: \n");
scanf("%s", animalName);
deleteAnimalByName(animalName, &nrOfAnimals, animals);
printf("Animal has been removed");
break;
还有我在 Administration.c 中的代码:
void deleteAnimalByName(char *animalName, int *nrOfAnimals, ANIMAL *animalArray)
{
for(int i = 0; i < *nrOfAnimals; i ++)
{
if(strcmp((animalArray + i)->Name, animalName) == 0)
{
for(int j = i; j < *nrOfAnimals - 1; j++)
{
(animalArray + j)->Age = (animalArray + j + i)->Age;
strcpy((animalArray + j)->Name, (animalArray + j + i)->Name);
(animalArray + j)->Species = (animalArray + j + i)->Species;
}
*nrOfAnimals = *nrOfAnimals -1;
}
}
}
结果: 只有一个名字重复的动物被删除了..有人可以帮我解决这个问题吗?卡在这上面很长一段时间了。
【问题讨论】:
-
寻求调试帮助的问题必须提供complete minimal reproducible example。也就是说,任何人都可以完全按照所示运行以重现问题的最少完整代码量。
-
那么我应该添加我的整个代码吗?
-
请阅读链接。但不,不是整个代码。将您的代码减少到重现问题所需的最低限度。例如,如果有代码要求输入可以删除并替换为静态数据。删除任何其他并非绝对需要的代码。
-
我认为您在删除项目时跳过了对元素的检查。示例:数组 = [a, b, c, c,d];你删除 c, i = 2;然后你将它增加到 3,但你只是将第二个“c”分配给索引 2。所以它被跳过了。解决方案:删除项目时不要增加 i。
-
你的意思是在for循环中吗?因为我尝试删除 i++ 但这不起作用