Io ho praticamente risolto usando le fgets():
codice:
FILE* p;
char buff[200];
char* pil;
pil=fgets(buff, 200, p); /* Leggo una riga (200 serve tanto per tanto si ferma a \n) */
for(; !feof(p); num++)
{
buff[strlen(buff)-1] = '\0'; /* siccome lo \n lo tiene dentro la stringa, allora lo tolgo */
if( p==NULL ) break; /* se il file non contiene nulla si ferma */
strcpy(&voce[num].nome, buff);, 200, p); /* copio buff (senza a capo) nella stringa che mi serve */
fgets(buff, 200, p);
}
A questo punto nel ciclo for ci sono tante letture quanti voci della struct (nella mia altre 3). Così ogni ciclo prende n righe corrispondente a n campi, fino a quando non arriva alla fine del file. La lettura la faccio alla fine del for così il puntatore si sposta e riesce a riconoscere se il file è finito. Una buona sintesi delle risposte grazie ancora