Testo:
Implementare in C la funzione:
TipoLista leggi_lista(const char* nomefile);
Tale funzione, presa in input la stringa nomefile che rappresenta il percorso di un file di testo contenente valori reali, restituisce una nuova lista contenente i valori presenti nel le, nello stesso ordine in cui occorrono in esso. I valori nel file sono separati da spazi bianchi o caratteri di ritorno a capo. Ad esempio, con il seguente le di input:
0.456 9.785 13.0
12.9
2.5
La funzione deve restituire la lista:
0.456 9.785 13.0 12.9 2.5
Se il file non puo essere aperto correttamente (perché, ad esempio, inesistente), la funzione deve
restituire la lista vuota
Il mio file txt è:
6.7 0.456 9.785 13.0
12.9
2.5
Il mio programma:
#include <stdio.h>
#include <stdlib.h>
struct elemSCL{
float info;
struct elemSCL *next;
};
typedef struct elemSCL TipoNodoSCL;
typedef TipoNodoSCL *TipoLista;
TipoLista leggi_lista(const char* nomefile);
int main()
{
const char *percorso = "double.txt";
TipoLista scl;
scl = leggi_lista(percorso);
}
TipoLista leggi_lista(const char* nomefile)
{
TipoLista aux;
FILE *f = fopen(nomefile, "r");
if(f == NULL)
{
printf("Errore nell'apertura del file\n");
TipoLista scl = NULL;
return scl;
}
else
{
//Creazione nodo generatore
TipoLista scl = (TipoNodoSCL*) malloc (sizeof(TipoNodoSCL));
scl -> next = NULL;
TipoLista aux = scl;
float cur_char;
while(fscanf(f, "%f", &cur_char) != EOF)
{
aux -> next = (TipoNodoSCL *) malloc (sizeof(TipoNodoSCL));
aux = aux -> next;
aux -> info = cur_char;
aux -> next = NULL;
}
aux = scl;
scl = aux -> next;
free(aux);
while(aux != NULL)
{
printf("scl -> info: %f\n", aux->info);
aux = aux -> next;
}
}
}
Il quale funziona, ma ha un piccolo neo. Stampa:
scl -> info: 0.000000
scl -> info: 6.700000
scl -> info: 0.456000
scl -> info: 9.785000
scl -> info: 13.000000
scl -> info: 12.900000
scl -> info: 2.500000
scl -> info: 0.000000 da dove salta fuori?
Penso sia riconducibile a
*scl = (TipoNodoSCL*) malloc (sizeof(TipoNodoSCL)); (*scl) -> next = NULL;
Non riesco a levarlo..