C - Scrittura di una lista da file

di il
2 risposte

C - Scrittura di una lista da file

Ciao, ho un problemino su questo esercizio, sono ore che sto cercando di capire dove sbaglio ma proprio non ho capito cosa ho fatto di sbagliato.
Praticamente avevo fatto questo esercizio e funzionava benissimo, mi stampava la lista.
Appena ho provato a farlo con la funzione "lista_crea", visto che nella consegna mi chiedeva di farlo con le funzioni, non mi stampa più la lista. Non capisco se ho sbagliato qualcosa nelle funzioni, se non mi carica i valori presi dalla lista o altro.

Il codice è questo:

/*
  Lettura di una lista da file
(in ordine inverso).
*/

#include<stdlib.h>
#include<stdio.h>


/* il tipo lista */

struct NodoLista {
  int val;
  struct NodoLista *next;
};

typedef struct NodoLista *TipoLista;

void InserisciTestaLista(TipoLista *pl, int e);
void StampaLista(TipoLista l);
/*
  stampa di una lista di lunghezza generica
*/

void StampaLista(TipoLista l) {
  TipoLista s;

  s=l;
  while(s!=NULL) {
    printf("%d ", (*s).val);
    s=(*s).next;
  }

  printf("ciao");

  printf("\n");
}

void lista_crea(char *file, TipoLista l){
  FILE *fd;
  int res;
  int x;

  fd=fopen(file, "r");
  if (fd==NULL) {
    perror("Errore in apertura del file");
    exit(1);
  }


		/* inizializza la lista */


		/* legge fino alla fine del file */
  while(1) {
    res=fscanf(fd, "%d", &x);
    if( res!=1 )
      break;

    InserisciTestaLista(&l, x);
  }

  fclose(fd);

}


/*
  aggiunta di un elemento in testa alla lista
*/

void InserisciTestaLista(TipoLista *pl, int e) {
  TipoLista t;

  t=malloc(sizeof(struct NodoLista));
  (*t).val=e;
  (*t).next=*pl;

  *pl=t;
}


/*
  main
*/

int main(int argc, char *argv[]) {

  if (argc < 2) { printf("Argomento mancante\n"); return 0; }

  TipoLista l = NULL ;



  lista_crea(argv[1], l);

                /* stampa la lista */

  StampaLista(l);

  return 0;
}

2 Risposte

Devi accedere o registrarti per scrivere nel forum
2 risposte