Чтение из файла с использованием fgets - PullRequest
12 голосов
/ 24 февраля 2012

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

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

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

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

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

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

Ответы [ 2 ]

21 голосов
/ 24 февраля 2012

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

Попробуйте:

char string[100];
while(fgets(string, 100, fp)) {
    printf("%s\n", string);
}
6 голосов
/ 24 февраля 2012

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

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

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

...