Non cambia anche perché non si capisce cosa tu stia facendo in

codice:
strcpy(temp,  n[i].cognome);
strcpy(f[i].cognome, n[i].cognome);
strcpy(temp[i+1], f[i].cognome);
Perché usi il vettore f ? I dati sono tutti nel vettore n ... Non esistono dati nei cognomi in f ... Non capisco proprio cosa volevi fare...