Jump to content
fipas13

Ler/Escrever ficheiro binário para lista

Recommended Posts

fipas13

O objetivo é guardar a informação da lista num ficheiro binário e quando inicia a aplicação ler do ficheiro novamente para a lista.

Declaração da estrutura e da sua lista num ficheiro header:

typedef struct pergunta{
int id;
char tema;
int pontos;
int numcasas;
char pergunta[250];
char a[50];
char b[50];
char c[50];
char d[50];
char resposta;
}PERGUNTA;
typedef struct Elem{
PERGUNTA node;
struct Elem *seguinte;
}ELEMENTO_PERG;

Inicialização na main de 4 listas desse tipo:

int main(){


ELEMENTO_PERG *iniListaDesp = NULL;
ELEMENTO_PERG *iniListaHist = NULL;
ELEMENTO_PERG *iniListaCult = NULL;
ELEMENTO_PERG *iniListaGeo = NULL;

Código para gravar a informação da lista para o ficheiro:

int gravarPerguntas(ELEMENTO_PERG **iniLista, char ficheiro[])
{
    FILE *fp=NULL;
    ELEMENTO_PERG *aux = *iniLista;
    fp=fopen(ficheiro, "wb");
    if(fp==NULL)
        {
            printf("Erro ao abrir o ficheiro\n");
            return -1;
        }

    while(aux!=NULL)
{
fwrite(&(aux->node), sizeof(PERGUNTA), 1, fp);
aux=aux->seguinte;
}
    fclose(fp);
    return 0;
}

Código para ler do ficheiro para a lista:

void carregaPerguntas(ELEMENTO_PERG **iniLista,int *totalp, char ficheiro[])
{
system("pause");
FILE *fp=NULL;
    int aux=0, res=0;
    fp=fopen(ficheiro, "rb");
if(fp==NULL){
    printf("Erro ao abrir o ficheiro\n");
    return;
}
res=fread(&aux, sizeof(int), 1, fp);
if(res>0){
    fread(&iniLista->node, sizeof(PERGUNTA), aux, fp);
    *totalp=aux;
}

else{
    printf("Nao foram encontrados dados no ficheiro\n");
}
fclose(fp);

}

Basicamente o programa crasha ao utilizar a função carregaPerguntas. Alguém me sabe dizer qual o erro?

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
HappyHippyHippo

para que serve esta chamada na função "caregaPerguntas" ?

res=fread(&aux, sizeof(int), 1, fp);


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
fipas13

para que serve esta chamada na função "caregaPerguntas" ?

res=fread(&aux, sizeof(int), 1, fp);

Basicamente é só para guardar em res o total de itens que tem o ficheiro.

Share this post


Link to post
Share on other sites
HappyHippyHippo

o porque razão essa chamada guarda em res o total de itens que tem o ficheiro ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
fipas13

o porque razão essa chamada guarda em res o total de itens que tem o ficheiro ?

Para saber se o ficheiro está vazio e para depois guardar esse total quando precisar de fazer ciclos for, por exemplo...

Share this post


Link to post
Share on other sites
HappyHippyHippo

eu não perguntei porque queres um valor com esse "significado", eu perguntei porque razão acahas que esse código faz o que estás a dizer


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • 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.