Чтение из файла с помощью 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 внутри тела цикла, как и в другом, а не в состоянии.