Provo a spiegarti che cosa non va nel tuo codice e come poterlo sistemare.
Ci sono almeno quattro cose che non vanno:
1) Fai un ciclo for dove la condizione di terminazione è " !=feof(p) "
Hai capito cosa ritorna feof?
http://www.cplusplus.com/reference/cstdio/feof/?kw=feo
Prova a fare una cosa semplicissima, dichiare una variabile ad esempio int n; e scrivi !(n=feof(p)) all'interno del tuo for, stampati la n vedi che valore stampa?
2) Forse nel file, Gallarate ha la G maiuscolo e nella strncmp, gallarate ce l'ha minuscola, poi dici di voler controllare 50 caratteri della stringa buffer con la stringa gallarate, non saranno mai uguali.
http://www.cplusplus.com/reference/cstring/strncmp
3) La lettura del file la fai solo nell'if quindi il file non lo consumi
4) Fai due letture che non comprendo
//buffer prende la riga
if ( !fgets (buffer , 1024 , f) )
return 0;
} else {
//salta la riga
if ( !fgets (buffer , 1024 , f) )
return 0;