C - Scrittura di una lista da file

di StudenteInformatico il
2 risposte
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

  • Nella lista_crea il parametro l deve essere passato per puntatore

    void lista_crea(char *file,TipoLista *l)

    e utilizzato con

    InserisciTestaLista(l, x);

    E nel main la lista_crea deve essere chiamata con

    lista_crea(argv[1], &l);
  • Perfetto risolto, grazie mille
Devi accedere o registrarti per scrivere nel forum
2 risposte