Fclose non viene eseguita perché è dopo un return. Il return del main deve essere zero se va tutto bene, un valore diverso da zero se vuoi segnalare una qualche terminazione anomala del tuo programma, ma che vuol dire che esci con trova_id che tra l'altro ha un return value double mentre il main ha bisogno di un int? Che poi anche trova_id è sbagliato: se il tuo while arriva a NULL qual è il return value di trova_id?