In teoria dovresti usare EOF,è vero che EOF ha spesso il valore -1,ma può anche darsi che sia settato a zero,quindi prova con:
codice:
while(fscanf(fp,"%s\t%s\t%d\n",u.nome,u.diff,&u.tempo)!=EOF)
Può darsi che ti funziona,ma comunque dipende anche da cosa hai nel file.
Stai leggendo il file spaziando di 8 caratteri in 8,sappi che nel file i dati non sono separati ciascuno da 8 spazi (la tabulazione /t) alcuni te li salta.
Prova così e dimmi se funziona.