好的,所以我正在尝试创建一个类似数据库的简易C程序,这意味着在数组中添加元素。由结构组成的静态数组:
typedef struct {
int id;
char name[20];
char active[20];
int quantity;
} Medicine;
接下来的2个是另一个模块
typedef Medicine ElemType;
typedef struct {
int len;
ElemType medList[30];
} StaticList;
好的,一切都很好,直到我尝试创建一个函数从名称中删除此静态数组中的元素。就像used使用了一个名字一样,我删除了名称与给定名称相匹配的元素。
void removeElem(StaticList *l, char* value) {
int k;
k = l->len;
int i = 0;
while (1) {
Medicine m = get(l, i);
if (strcmp(m.name, value)==0) {
int j = i;
for (j = i; j<k-1; j++) {
l[j] = l[j+1];---changed to ->> l->medList[j] = l->medList[j+1];
}
(*l).len--;
break;
}
i++;
if (i == k-1) {
break;
}
}
}
问题?我的程序具有以下功能: - 加上元素 - 列出所有元素 - 删除elem
如果我添加1个elem,那么我删除它...我的列表应该是空的吗?好吧我的东西充满了。当我尝试添加另一个元素时,我的程序崩溃了,为了找出发生了什么以及我的列表有多长时间...我在清空列表后puta print并且说“4406168 Elems added”。 所以基本上我从0开始,添加1个elem,尝试删除它,我的数组充满4406168更多?发生了什么事?
如果需要更多信息,我会提供任何信息。谢谢。
答案 0 :(得分:0)
typedef struct{
int len;
int a[10];
} List;
void removeElem(List& list, const int val)
{
int i = 0;
while(i < list.len){
if(list.a[i] == val){ // if match
// copy values forward
for(int j=i+1;j<list.len;++j){
list.a[j-1] = list.a[j];
}
--list.len;
}
++i;
}
}