Jump to content

Problemas a ligar duas Structs - fscanf


thinkabout

Recommended Posts

Boas,

        Tenho as seguintes estruturas.

        Estou a tentar fazer a ligação entre as duas struct que tenho, mas estou com alguns problemas depois a ler do fscanf.

        O objectivo é carregar o animal de uma lista ligada e ao carregar o mesmo, dizer a que área que ele pertence campo que está noutra struct (Vector Dinâmico).

     

 Se usar a ANIMAL1

        struct ANIMAL1 {
        int id; // id único por animal    

        char especie[MAX]; // ID Unico

        char nome[MAX];

        int peso;                      

        char Area[MAX]; // Trabalha OK

        pno prox;

    };

E depois usar 
  
while (fscanf(pFile, "%s %s %d %s", buffer.especie, buffer.nome, &buffer.peso, buffer.Area) == 4), trabalha sem problemas.


        Mas a minha intenção é usar 

        struct ANIMAL2 {
        int id; // id único por animal    

        char especie[MAX]; // ID Unico

        char nome[MAX];

        int peso;

        Area * local;
         // Tenho problemas depois no fscanf.

        pno prox;

    };

        typedef struct ANIMAL no, *pno;

while (fscanf(pFile, "%s %s %d %s", buffer.especie, buffer.nome, &buffer.peso, buffer.local->idarea) == 4)


O meu fscanf não gosta quando vai ler buffer.local->idarea, e não sei como o ler, agradeço ideias.



    struct area {
            char idarea[MAX]; //ID area

            float pesocomportado;

            int nrfronteiras;

            int nranimais;

            char * fronteiras[MAXAREAS];
       
};

    typedef struct area Area, *pArea;
Edited by thinkabout
Link to comment
Share on other sites

Vou tentar explicar-me o melhor possível.

 

Tenho uma lista com 2 animais, essa lista diz a onde esse animal está no Zoo.

Leao Simba 250 AreaA

Zebra Leopoldo 100 AreaB

 

Quando leio a lista, quero guardar a localização do animal num campo que não está na lista ligada, está noutra struct (Vector).

 

Se guardar dentro da LISTA com um campo char local[max], não tenho problemas, para esse efeito estou a usar este fscanf.

while (fscanf(pFile, "%s %s %d %s", buffer.especie, buffer.nome, &buffer.peso, buffer.Area) == 4), trabalha sem problemas.

 

Se tentar guardar dentro do Vector com usando o campo Area * local; , que defini dentro da LISTA.

while (fscanf(pFile, "%s %s %d %s", buffer.especie, buffer.nome, &buffer.peso, buffer.local->idarea) == 4)

o fscanf falha-me.

Link to comment
Share on other sites

Eu quero dizer que um determinado animal pertence a uma área.

 

Como não tenho esse campo diretamente na STRUCT animal, tenho que ir gravar essa informação noutro local (Vector - Area).

E estava a tentar gravar aqui buffer.local->idarea.

O que nem faz muito sentindo, pois quando carrego o animal depois também vou querer acrescentar peso e número de animais dentro daquela Area (vector).

Posso recolher a informação como string como estou a fazer e depois a tratar, depois de achar o vector que quero inserir.

O animal tem que ficar com a informação de onde pretende, posso querer lista todos os animais que estão na AreaA.

Contudo não posso fazer isto

Buffer.local->idarea = buffer.nomelocal;

Confesso que o fscanf não sentido realmente mas não estou bem a ver como dar a volta a questão.

 

Edited by thinkabout
Link to comment
Share on other sites

vamos la por partes (nem estou a ver como fazer como tu vás à fonte sem te levar ate lá).

se são registos diferentes nao tens nada de ler dados para um registo diferente.

sucintamente, o que tem de fazer nao e mais do que ler os dados do registo animal, sejam ele directamente para uma estrutura ou nao, somente depois fazer todo o tranalho de pesquisa e actualizacao dos dados sobre um registo existente ou nao da lista de areas. No final actualizas a tua estrutra animal de acordo com a referência ao registo área usado/manipulado no passo intermédio.

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.