read from binary file to linked list c

0

Well, I'm having a problem reading the information from a binary file and inserting it into memory in a linked list.

PERGUNTAS val;

lista_perguntas * aux = original->next;
lista_perguntas * base = original;
lista_perguntas * novo;


 while (aux != NULL) {    // eu estava com um problema anteriormente que o primeiro elemento da lista era ignorado por isso eu pesquisei e encontrei esta solução que basicamente ignora esse elemento e passa para o segundo pelo que eu percebi
    aux = aux->next;
    base = base->next;
}


 while(fread(&val, sizeof(PERGUNTAS), 1, fp)!=-1){

novo = (lista_perguntas*) malloc(sizeof (lista_perguntas));
novo->valor = val;
novo->next = aux;
base->next = novo;

 }

My goal would be to read the file information each time and insert a new node in the list, but the program is giving error. I still do not master this list very well so thank you for enlightening me:).

Thank you

    
asked by anonymous 28.05.2016 / 15:26

1 answer

0

Here is an example that might solve your problem:

Data structure:

#define PERGUNTA_TAM_MAX   (256)

typedef struct pergunta_s pergunta_t;

struct pergunta_s
{
    char pergunta[ PERGUNTA_TAM_MAX + 1 ];
    pergunta_t * prox;
};

Function to load a list of questions from a file:

int perguntas_carregar( const char * arq, pergunta_t ** perg )
{
    FILE * pf = NULL;
    pergunta_t * p = NULL;
    pergunta_t * pant = NULL;
    pergunta_t * pprim = NULL;
    int n = 0;
    int nread = 0;

    pf = fopen( arq, "rb" );

    if(!pf)
        return ERRO_LEITURA_ARQUIVO;

    while(1)
    {
        p = malloc( sizeof(pergunta_t) );

        nread = fread( p, sizeof(pergunta_t), 1, pf );

        if( nread != 1 )
        {
            free(p);
            break;
        }

        p->prox = NULL;

        if(pant)
            pant->prox = p;
        else
            pprim = p;

        pant = p;

        n++;
    }

    fclose(pf);

    *perg = pprim;

    return n;
}

I hope I have helped!

    
01.06.2016 / 22:54