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..