Jump to content
mario_filipe

2 listas no mesmo ficheiro

Recommended Posts

mario_filipe

Boas, pretendo guardar duas listas no mesmo ficheiro mas nao estou a conseguir,

alguem sabe onde esta o problema ?

Qualquer ajuda é bem-vinda

FILE *f;

    f = fopen(pass, "wb");
    if (f==NULL)
    {
        printf("ERRO: impossivel criar ficheiro\n");
        return;
    }
    else
    {
        //guardar lista 1
        while(l_part!=NULL)
        {
            fwrite(l_part, sizeof(participante),1,f);
            l_part=l_part->prox;
        }

        //guardar lista 2
        while(l_aux!=NULL)
        {
            fwrite(l_aux, sizeof(participante),1,f);
            l_aux=l_aux->prox;
        }
        fclose(f);

Cumps

Share this post


Link to post
Share on other sites
Diutsu

estás quase lá tens é de no fwrite passar l_part->data (ou outro valor qualquer que tenhas lá guardado), estás apenas a passar o ponteiro para o nó da lista, que não tem grande informação. util


XX SINFO - Semana Informática

Share this post


Link to post
Share on other sites
mario_filipe

Estou a gravar num ficheiro binario, logo posso gravar um nó de cada vez nao havendo necessidade de gravar os dados campo a campo??

A minha outra duvida é se a primeira lista é apagada quando gravo a seguinte.

Obrigado

cumps

Share this post


Link to post
Share on other sites
Diutsu

tens de os guardar campo a campo, porque se enviares apenas o nó o C não sabe o que é que tem de guardar nesse nó, e acaba por guardar tudo e nada ( guarda tipos básicos, mas tudo o que tiver ponteiros fica perdido (é escrito o endereço de memória apontado que em utilizações futuras é inutil)).

Escrever a segunda lista não reescreve sobre a primeira.


XX SINFO - Semana Informática

Share this post


Link to post
Share on other sites
RSFalcon7

a segunda lista não apaga a primeira, mas não tens como saber onde ela começa

Share this post


Link to post
Share on other sites
KTachyon

tens de os guardar campo a campo, porque se enviares apenas o nó o C não sabe o que é que tem de guardar nesse nó, e acaba por guardar tudo e nada ( guarda tipos básicos, mas tudo o que tiver ponteiros fica perdido (é escrito o endereço de memória apontado que em utilizações futuras é inutil)).

Podes escrever uma struct de uma vez para um ficheiro. Não é obrigatório guardares campo a campo. Isto desde que os tipos de dados que tens na struct não sejam ponteiros.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Diutsu

eu disse isso e também ele estava a tentar escrever um ponteiro para uma struct


XX SINFO - Semana Informática

Share this post


Link to post
Share on other sites
KTachyon

Sim, mas a resposta seria "deves" e não "tens". :)

Mas a verdadeira razão porque não se devem gravar structs em ficheiros é por causa da portabilidade entre sistemas.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
mario_filipe

Obrigado pelas respostas!

Quanto ao assunto do que devo passar para o ficheiro fiquei esclarecido,

mas nao tenho maneira de saber onde começa a segunda lista?? Significa que nao conseguirei ler do ficheiro as listas guardadas ?

Se fizer algo do genero para ler cada uma das listas do ficheiro:    fread(novo, sizeof(participante),1, f);

e ir construindo as novas listas, isto nao ira funcionar ?

Share this post


Link to post
Share on other sites
Diutsu

nao, porque a menos que saibas à partida quantos elementos tem cada lista, não consegues ler repara

tens estas duas listas

a b c d e f

g h i j

quando guardas no ficheiro ficas com

abcdefghij

e agora como é que lês o ficheiro para duas listas?


XX SINFO - Semana Informática

Share this post


Link to post
Share on other sites
KTachyon

Das duas uma, ou arranjas um separador, ou indicas o número de elementos e um separador inicial. Problem solved.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
mario_filipe

Thanks, vou tentar fazer algo desse genero e ver no que dá!

Cumps

Share this post


Link to post
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.