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

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.