![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
привет, не могу понять как работает feof()
вот пример:
вообщем вопрос в том почему когда в файл записана лишь одна запись структуры на в входе в while(!feof(file)) программа проходит спокойно, и остается там до тех пор пока ещё раз не прочитаем fread(), но что самое интересно когда я смотрю с помощью ftell() позицию внутри файла то она одинакова до того чтения что происходит внутри while. тойсть например структура весит всего 60 байт, мы считываем эти 60 байт за один раз и по идее файл закончился, но это не так, надо считать ещё раз, только вот что читать из фала если он закончился? вообще ничего не понимаю ![]() |
|||
|
||||
Partizan |
|
||||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 4 Всего: 67 |
читаем MSDN
теперь надеюсь всё понятно? если нет. вот мой вольный перевод: функция эта возвращает ненулевое значение после первой операции чтения, которая патыется прочесть данные после конца файла... то бишь если у вас в примере будет
а в файл будет записана одна структура длиной в 60 байт.. то в цикл программа не войдёт Это сообщение отредактировал(а) Partizan - 11.4.2007, 00:01 -------------------- СУВ, Partizan. |
||||
|
|||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
Насколько я понимаю логику работы feof(), функция эта просто позволяет узнать, не наткнулись ли мы на конец файла.
При чтении из файла все соответствующие функции работают как-бы в слепую, т.к. размер файла не известен, т.е. даже если прочитать весь файл ровно до конца и остановиться на последнем байте, конца файла всё равно еще не видно. То, что файл кончился можно узнать только попытавшись продвинутся за его пределы и получив ошибку в ответ, и только после этого feof() вернёт true. Всё вышесказанное - моё личное имхо, я вроде бы как-то давно читал про это, но не помню где, так что ссылку дать не могу ![]() edit Partizan, точно, вот именно так там и было написано Это сообщение отредактировал(а) nickless - 11.4.2007, 00:20 -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |