1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Listas Ligadas em C

Discussão em 'Programação' iniciada por HuSa, 13 de Junho de 2009. (Respostas: 5; Visualizações: 917)

  1. HuSa

    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.
     
  2. Baderous

    Baderous Banido

    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.
     
  3. HuSa

    HuSa Power Member

    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
     
  4. blackburn69

    blackburn69 Power Member

    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.
     
  5. HuSa

    HuSa Power Member

    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: 14 de Junho de 2009
  6. blackburn69

    blackburn69 Power Member

    Sim. Não precisas dos (). ;)
     

Partilhar esta Página