ciao a tutti

ho creato un programma che crea una lista di tipo LIFO , e che scrive la stessa in un file binario

ora questo programma è strutturato in questo modo :

codice:

typedef struct meteo
{
	char nome [12] ;
	int numero ;
	struct meteo *next ;
}meteo ;

typedef meteo *meteoPtr ;
in pratica la lista prevede che ogni nodo abbia una stringa (nome) e un numero identificativo


ora agendo in questa maniera

codice:
do {
	 
		fprintf(stdout , "digita 0 per finire  \n" ) ;
		fscanf (stdin , "%d" , &i ) ;
		Testa = crea (Testa ) ;
		n++ ;   /* contatore numero nodi */

	} while ( i != 0 ) ;

e richiamando la funzione "crea"

codice:

meteoPtr crea (meteoPtr *l ) 

{
	meteoPtr nuovo ; /* creo un nuovo nodo */
	nuovo = (meteoPtr*) malloc (sizeof (meteo) ) ;
	nuovo->numero = 1 + rand () % 100 ;
	fgets (nuovo->nome , 10 , stdin ) ;
	

	nuovo->next = l ;

	return nuovo ;

}

il programma qualora digito 0 subito , mi genera un numeo casuale , ma ignora
la funzione fgets (per la creazione di stringa)


e in ogni caso , genera sempre un valore ( numero casuale) , superiore al numero
di stringhe presenti , come se "l'ultima volta" ignorasse fgets

qualcuno mi sa spiegare perchè?

grazie