il motivo potrebbe essere nel controllo di fine file fatto DOPO aver scritto il carattere con putc.
prova a ristrutturare il ciclo in modo che effettui il controllo su EOF prima di scrivere.