c - 在 C 中删除结构问题的元素数组
问题描述
我在删除 C 中的结构数组元素时遇到问题。所以,我有一个程序有 2 个选项,添加和删除。问题是,当我从 struct 数组中删除一个元素并添加另一个元素时,输出将显示我之前删除的元素,而我添加的新元素没有显示。我该如何解决这个问题?
这是我试图制作的程序
#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 个项目。
您可能希望在“案例 2”中添加 i-=2,因此 i 是应该添加新项目的位置。另请注意,在您的示例输入/输出中,当您删除第 2 项时,您会覆盖“Sprite”并添加“Beer”,因此预期输出为
Items:
Cola-Cola
Beer
推荐阅读
- javascript - 为什么在使用日期对象创建日期时收到“'日期'类型的参数不可分配给'字符串|数字'类型的参数”?
- tensorflow.js - 全卷积网络
- angular - 更新 mat-select 动态反应形式中的选项
- sql - 在 SQL 插入时,将新行的分配 ID 写入第二列
- excel - VBA中的if else循环中是否有if else循环?
- java - Mapstruct:HashMap 作为 Object 的源
- html - 如何使页面顶部的栏在 html 中消失
- git - Azure DevOps CI/CD 和从源代码管理中分离连接字符串
- django - 简单模型模板通过外键访问?我错过了什么?
- python - ALTER TABLE - 写入通信数据包时出错