我要求d->id
将其放在列表中,但是如果我要求多个,则所有列表项都将获取最后一个。
例如,如果for
具有2次迭代,并且novo->prato[0]
是"M1"
(询问用户),而novo->prato[1]
是"M3"
,则两个位置都保持"M3"
。为什么?
这是代码:
typedef struct pedido pedido, *ppedido;
typedef struct prato prato, *pprato;
struct pedido{
char id[5];
int prioridade;
int mesa, n_pratos;
pprato prato[TAM];
ppedido prox;
};
struct prato{
char id[5];
};
int verifica_prato(ppedido p,int j)
{
FILE *f;
struct item aux;
int i=0;
f = fopen("menu.bin", "rb");
if(f == NULL){printf("O sistema nao consegue aceder a memoria");return;}
while((fread(&aux, sizeof(struct item), 1, f)) == 1){
if((strcmp(p->prato[j]->id, aux.id)) == 0)
i++;
}
fclose(f);
if(i == 0){
printf("Prato nao existe no menu.\n");
return 1;
}
if(i > 1)
return 0;
}
for(i=0;i<novo->n_pratos;i++){
do{
printf("ID do prato %d: ", i+1);
scanf("%s", &d->id);
novo->prato[i] = d;
k = verifica_prato(novo,i);
}while(k != 0);
}
最佳答案
在执行d
时,您正在将指针分配给结构novo->prato[i] = d
,
因此,每次更改d
时,它都会反映在novo->prato[i]
上,因为prato数组中的所有值都指向相同的地址,即d
。
我不确定您打算做什么,但是一种方法可能是每次循环使用malloc d
询问用户输入之前。请记住,您最终还需要研究“释放”内存prato[i]
。
关于c - 每个结构项都获得用户键入的最后一个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11174766/