Listas Ligadas em C

HuSa

Power Member
Boas estou a fazer um programa em c e não percebo porque dá o erro de "incompatible types in assignment" aqui:
Código:
temp->nome=nome_cli;
   temp->mor=mor_cli;
   temp->tel=tel_cli;
   temp->mail=mail_cli;
Sendo o minha estrutura assim:
Código:
typedef struct clientes {
    int num_cli;//Numero passageiro
    char nome[50];//NOme Passageiro
    char mor[50];//Morada do passageiro
    char tel[12];//Telefone passageiro
    char mail[25];//Mail passageiro
    struct clientes *next;//Ponteiro para o proximo elemento
    struct clientes *previous;//Ponteiro para o elemento anterior
} List_cli;
e a funçao
Código:
void  inserir_cliente(List_cli *lis)
{
   char nome_cli[50],mor_cli[50],tel_cli[12],mail_cli[25];
   List_cli *temp;
   temp=lis;
   while ((temp->next==NULL)==0)
     temp=temp->next;
   temp->num_cli=(temp->previous-> num_cli)+1;
   printf("Nome: ");
   scanf("%s",&nome_cli);
   printf("Morada: ");
   scanf("%s",&mor_cli);
   printf("Telefone: ");
   scanf("%s",&tel_cli);
   printf("Mail: ");
   scanf("%s",&mail_cli);
   temp->nome=nome_cli;
   temp->mor=mor_cli;
   temp->tel=tel_cli;
   temp->mail=mail_cli;
   (temp->next)->previous=temp;
}
Se alguem me poder ajudar agradecia.
 
Quando usas o scanf para ler strings não utilizas o operador '&', uma vez que o nome da string já é, ele mesmo, um apontador para o início da string. A atribuição das strings no 1º bloco de código que apresentaste deve ser feita com a função strcpy, senão estás a fazer meramente uma atribuição de endereços de memória.
 
Quando usas o scanf para ler strings não utilizas o operador '&', uma vez que o nome da string já é, ele mesmo, um apontador para o início da string. A atribuição das strings no 1º bloco de código que apresentaste deve ser feita com a função strcpy, senão estás a fazer meramente uma atribuição de endereços de memória.

Muito obrigado pela ajuda.

Agora surgiu-me mais 2 problemas que eu nao estou a perceber porque do erro.

1º tenho a esta estrutura
Código:
typedef struct voo {
    int num_voo;//Numero do voo
    char data[10];//Data do voo
    int lot;//Lotação restante
    struct reserva *next;//Ponteiro para o proximo elemento
    struct reserva *previous;//Ponteiro para o elemento anterior
} List_voo;
Código:
void  inserir_voo(List_voo *lis)
{
   char data_voo[10];
   int lot_voo;
   List_voo *temp;
   temp=lis;
   while ((temp->next==NULL)==0)
     temp=temp->next;
   temp->num_voo=(temp->previous->num_voo)+1;
   printf("Data: ");
   scanf("%s",data_voo);
   printf("Lotacao: ");
   scanf("%d",&lot_voo);
   strcpy(temp->data,data_voo);
   temp->lot=lot_voo;
   (temp->next)->previous=temp;
}
e ao inserir os dados ele diz que "structure has no member named 'num_voo' isto na linha emp->num_voo=(temp->previous->num_voo)+1;, o que é estranho pois tenho na estrutura o campo num_voo


2ºao criar um array com apontadores para o voo da um syntax error before '*' token mas nao percebo o porque deste erro.
Código:
static List_Voo *listas_voo[MAX];
tenho o MAX defenido como
Código:
#define MAX 100
 
Boas. Para o teu 1º erro o problema é que 'previous' é um ponteiro para uma estrutura deste tipo:
Código:
    struct reserva *previous;//Ponteiro para o elemento anterior
e não para uma struct voo, logo não podes aceder ao campo num_voo pois ele não existe.
Para o 2º erro, tens escrito List_Voo e não List_voo.

Cumprimentos.
 
Boas. Para o teu 1º erro o problema é que 'previous' é um ponteiro para uma estrutura deste tipo:
Código:
    struct reserva *previous;//Ponteiro para o elemento anterior
e não para uma struct voo, logo não podes aceder ao campo num_voo pois ele não existe.
Para o 2º erro, tens escrito List_Voo e não List_voo.

Cumprimentos.

Que cego que eu sou.
Muito Obrigado


Como é que eu vou indicar ao ponteiro para o ponteiro da proxima estrutura apontar para o actual?
não será assim
Código:
(temp->next)->previous=temp;
 
Última edição:
Back
Topo