eof
достигается только после , которую вы пытались прочитать из файла, который находится в конце.Вместо этого вы должны использовать возвращаемое значение fgets
(которое возвращает NULL
для eof или error и указатель, который указан в противном случае):
char string[100];
while(fgets(string, 100, fp))
// do stuff with string
Проверка возвращаемого значения таким образом никогда не приведет кударить eof внутри тела цикла, как и в другом, а не в условии.