Salve a tutti, sto avendo alcuni problemi nella creazione del mio software, in particolare in questo punto:

codice:
/*STRUTTURA DEL NODO DELLA LISTA*/
struct nodo {
	int mat, mediavoto;
	char nome[MAX];
	struct nodo *succ;
	};



/*CREAZIONE DELLA LISTA DA FILE*/
struct nodo *crealista(void){
	struct nodo *nodo, *testa;
	testa = NULL;
	FILE *file = fopen("dist.txt", "r");	/*Apertura del file in modalità Lettura*/

	while(!feof(file)){	/*Fino alla fine del file chiamato "file"*/
		nodo = malloc(sizeof(struct nodo));	/*Alloca memoria per il nodo*/
		fscanf(file, "%d %s %d", &nodo-> mat, nodo-> nome, &nodo ->mediavoto);	/*Acquisisce la tripletta di dati*/
		nodo-> succ = testa;	/*Il puntatore al nodo successivo punterà alla testa*/
		testa = nodo;	/*La testa sarà il nodo appena creato*/
	}
	fclose(file);	/*Chiusura del file*/
	return(testa);	/*Restituisce il puntatore alla testa della coda*/
}



/*STAMPA DELLA LISTA CREATA*/
void stampa_lista(struct nodo *nodo){
	while (nodo != NULL){	/*Finchè non arrivo all'ultimo nodo*/
		printf("Matricola: %d | Nome: %s | Media voto: %d\n", nodo->mat, nodo->nome, nodo->mediavoto);	/*Stampo le triple*/
		nodo = nodo->succ;	/*Avanzo di nodo*/
	}
return;
}
Praticamente creo una struttura dati a lista con dei valori che prendo in input da un file chiamato dist.txt. Ora, avviene tutto alla perfezione tranne che alla fine della lista ho un nodo in più, che ovviamente nella stampa, me lo stampa anche, con valori: Matricola: 0 | Nome: | Mediavoto: 0.

Perchè succede ciò? Ho utilizzato male la funziona feof? O ho sbagliato qualcosa col collegamento dei nodi della lista?