我在删除 C 中结构数组的元素时遇到问题。所以,我有一个程序,有 2 个选项:添加和删除。问题是,当我从结构体数组中删除一个元素并添加另一个元素时,输出将显示我之前删除的元素,而我添加的新元素不会显示。我该如何解决这个问题?
这是我尝试制作的程序
#include "stdio.h"
struct itemlist
{
char name[25];
int quantity;
};
int main()
{
int progress,processNum,i,sizeStruct = 0;
struct itemlist items[105];
printf("How many progress you want to do?\n");
scanf("%d",&progress); getchar();
for(i = 0; i < progress ; i++){
scanf("%d",&processNum); getchar();
switch (processNum){
case 1: // Add
printf("Name of item :\n");
scanf("%[^\n]",items[i].name); getchar();
printf("How many items?:\n");
scanf("%d",&items[i].quantity); getchar();
sizeStruct++;
printf("Success to add!!\n");
break;
case 2: // Delete from database, and its last index can be replaced.
int index3;
printf("Which index do you wanna delete?\n");
scanf("%d",&index3); getchar();
for(int k = index3-1; k < sizeStruct - 1; k++){
items[k] = items[k + 1];
}
sizeStruct--;
printf("Your item has been deleted.\n");
break;
}
}
// Print All last Items
printf("Items: \n");
for(int j = 0; j < sizeStruct; j++){
printf("%s\n",items[j].name);
}
return 0;
}
这是输入和输出:
How many progress you want to do?
4
1
Name of item :
Cola-Cola
How many items?:
3
Success to add!!
1
Name of item :
Sprite
How many items?:
4
Success to add!!
2
Which index do you wanna delete?
2
Your item has been deleted.
1
Name of item :
Beer
How many items?:
8
Success to add!!
Items:
Cola-Cola // supposed to be Beer
Sprite
但是我的程序正在运行,但删除后我没有添加任何项目。如何解决这个问题?
最佳答案
您总是在位置 i 添加一个项目,但是当您删除一个项目时,您将数组向左移动一个位置,覆盖您要删除的项目,但您没有更新 i。 当你想删除第2项时,for循环
for(int k = index3-1; k < sizeStruct - 1; k++)
不会执行任何操作,因为 k=1,sizeStruct=2。这很好,因为“Sprite”之后没有项目可以覆盖它。但在此之后我会增加。因此你的数组最后看起来像这样
i : 0 1 2 3
item: Cola-Cola Sprite /*Garbage*/ Beer
并且您只打印最后的前 2 项。
您可能需要在“case 2”内添加 i-=2,这样 i 就是应添加新项目的位置。 另请注意,在示例输入/输出中,当您删除第 2 项时,您会覆盖“Sprite”并添加“Beer”,因此预期输出为
Items:
Cola-Cola
Beer
关于c - 删除一个元素 C 中的结构体数组问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59213273/