Чтение из файла с помощью fgets

Я читаю из файла формата

1 32 43 23
32 43
123 43 54 243 
123 2222
2

вот мой фрагмент кода.

string[100];
while(!feof(fp))
fgets(string,100,fp)

теперь, когда я помещаю каждую строку, в последней строке я получаю повторение. и еще несколько двусмысленностей (например, что-то еще напечатано около 123).

Как решить эту проблему?

Ответ 1

Вам нужно проверить возвращаемое значение fgets. Если чтение выполнено успешно, fgets возвращает указатель на буфер, который вы передали ему (т.е. string в вашем примере). Если End-of-File встречается и символы не читаются, fgets возвращает NULL.

Попробуйте следующее:

char string[100];
while(fgets(string, 100, fp)) {
    printf("%s\n", string);
}

Ответ 2

eof достигается только после того, как вы попытались прочитать из файла, который находится в конце. Вместо этого вы должны использовать возвращаемое значение fgets (которое возвращает NULL по eof или ошибке, а указатель - в противном случае):

char string[100];
while(fgets(string, 100, fp))
    // do stuff with string

Проверка возвращаемого значения, как это, приведет к тому, что вы никогда не попадете в eof внутри тела цикла, как и в другом, а не в состоянии.