gpt4 book ai didi

c - 删除一个元素 C 中的结构体数组问题

转载 作者:行者123 更新时间:2023-11-30 16:09:05 25 4
gpt4 key购买 nike

我在删除 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com