Я прошу указать 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"? Вы должны попытаться обеспечить минимальный (то есть без всех бесполезных структурных полей и логики проверки), компилируемый пример вашей проблемы. – hugomg
Это все. Я забыл поставить его на этот пост. Сожалею. pprato d; \t \t d = (struct prato *) malloc (sizeof (prato)); –
Я не думаю, что так ... –