gpt4 book ai didi

c - 向数组添加元素,旧值变为0但新值显示

转载 作者:行者123 更新时间:2023-11-30 16:21:06 26 4
gpt4 key购买 nike

我编写了这个程序,我可以使用员工的名字向他们添加照片。但现在它添加了新值,但已经存在的值变为 0。

这是结果:

type in the name you would like to add pic to 
Anna
type in pic
55
1.Show existing
2.add pic to a staff
1
Adam 1,2,3,
Anna 0,0,0,55,

其余代码:

typedef struct Staff
{

char name[30];
int *pic;
int imagecount;
} Staff;


void printStaff(Staff *pStaff)
{
printf("%s ", pStaff->name);



if ( pStaff->pic) {
for(int i=0; i<pStaff->imagecount; i++){

printf("%d,",pStaff->pic[i]);
}
}

printf("\n");
}



void PrintList(Staff aLista[], int staffCount)
{

for (int i = 0; i < staffCount; i++) {

printStaff(&aLista[i]);
}
}

更新的代码:

Staff addpic(Staff array[], int staffCount)
{
Staff newStaff = {};

printf("type in the name you would like to add pic to \n");
fgets(newStaff.name, 30, stdin);


for(int i = 0; i< staffCount; i++) {

if(strcmp(array[i].name,newStaff.name)==0) {
if(array[i].imagecount<5) {
printf("type in pic\n");
int newpic;
scanf("%d",&newpic);

array[i].imagecount++;
int *newpics = realloc(newStaff.pic, (array[i].imagecount) * sizeof(int));
newpics[array[i].imagecount-1] = newpic;
array[i].pic = newpics;

}
}
}
return newStaff;

其余代码:

 int main(void)
{
int staffCount=0;



int input;


int test[3] = {1,2,3};

Staff myStaff[5] = { {"Adam", test, 3},{"Anna",test,3} };

staffCount=2;

do
{
printf("1.Show existing \n");

printf("2.add pic to a staff");
printf("\n");
scanf("%d", &input);

switch(input)
{

case 1:
PrintList(myStaff,staffCount);

break;
case 2:
addpic(myStaff,staffCount);
break;

default:
printf("inccorect inpput\n");
break;
}
}while (input<'1' ||input<'2');


return 0;
}

感谢任何帮助,但我是编码新手,因此请记住这一点。

最佳答案

addpic 函数中,您执行的操作

int *newpics = realloc(array[i].pic, ...);

一个问题是,如果您对 array 中初始化的两个元素之一执行此操作,则 array[i].pic 将指向第一个元素数组(main函数中的数组test)。

数组无法重新分配。如果要重新分配内存,则还需要动态分配原始内存。

关于c - 向数组添加元素,旧值变为0但新值显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55001991/

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