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;
}