Indirizzo

typedef char PAROLA[300];
Questa è una scelta errata , poichè in questo caso è molto difficile modificare i dati (pensate a cambiare il numero civico).
Inoltre c'è una perdita di contenuto informativo (come fare per controllare se due persone abitano nella stessa città?), ed è più difficile trovare errori nei dati (per esempio, numero interno =1000).
Una scelta più ragionevole è
typedef struct{ PAROLA VIA;
                     int NUM_CIVICO ;
                     int INTERNO ;
                     int CAP ;
                     PAROLA CITTA ;
                     PAROLA STATO ;
    } INDIRIZZO;

void ScriviIndirizzo(FILE * fout, INDIRIZZO ind)
{
   ScriviParola(fout,"Via ");
   ScriviParola(fout,ind.VIA);
   fputc(' ',fout);
   fprintf(fout,"%d ",ind.NUM_CIVICO);
   fprintf(fout,"%d ",ind.INTERNO,fout);
   fprintf(fout,"%d ",ind.CAP,fout);
   ScriviParola(fout,ind.CITTA);
   fputc(' ',fout);
   ScriviParola(fout,ind.STATO);
   fputc(' ',fout);
}

INDIRIZZO LeggiIndirizzo(FILE * fin)
{
   INDIRIZZO ind;
   
   LeggiParola(fin,ind.VIA);
   fscanf(fin,"%d ",&ind.NUM_CIVICO);/*fgetc(fin);*/
   fscanf(fin,"%d ",&ind.INTERNO,fin);/*fgetc(fin);*/
   fscanf(fin,"%d ",&ind.CAP,fin);/*fgetc(fin);*/
   LeggiParola(fin,ind.CITTA);
   LeggiParola(fin,ind.STATO);
   return ind;
}