se il flusso va nell'else vuo dire che il puntatore fp è NULL, per cui il file non è aperto.
Mi soffermo ancora una volta sulla necessità di chiudere il file, la chiusura svuota i buffer e garantisce che tutto sia scritto su disco. Al termine del programma, in ogni caso, ogni file aperto viene chiuso automaticamente quindi teoricamente potresti omettere la chiusura.
Comunque quello che ho riportato io è il codice scritto da te, tolto l'errore a runtime.
ciao
sergio

Rispondi quotando