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