Non salta solo quella, se tu avessi fatto un poco di debug ti sarebbe chiaro
non so che compilatore/IDE usi, ma il mio che è scrauso e che so usare molto poco mi ha indicato il tuo problemino fin da subito, quindi forse è il caso di mettere un po' di impegno
ad esempio, e con questo finisco, tu hai scritto, nella main:
if(fp==NULL){
printf("errore nell'apertura del programma");
}else{
......
ora, al mio (non allenato) occhio saltano all'occhio, appunto ben tre problemi
solo in quelle righe li
1 "fp==NULL" è un test inutile, anche se pure molti docenti sembra che lo consiglino "!fp" è esattamente la stessa cosa (viene dal K&R non me lo sono inventato io)
2) ok, che l'apertura del file ha fallito, ma non si da un return con un valore d'errore? almeno un return 1
3) non hai letto quello che scrivi: perché hai scritto "apertura del programma", e non "apertura del file"
queste cose indicano che non hai "pensato" al programma mentre lo scrivevi, queste cose non sono "paranoie", fidati
se le applichi i problemi spariscono, infatti:
intanto che io leggevo il tuo programma ho "visto" subito il problema principale, e te lo ho indicato immediatamente