È la solita storia del mischiare input formattato con input non formattato... la scanf lascia nel buffer di lettura il \n finale (perché non lo riconosce come numero); questo non è un problema per successive chiamate a scanf (che lo ignorano automaticamente), ma la fgets inizia a leggere, incontra subito il \n e quindi considera il lavoro finito.
La cosa più semplice da fare è cambiare la scanf in:
in modo che si "mangi" anche il newline.codice:scanf("%d\n", &i);

Rispondi quotando