Форум программистов, компьютерный форум CyberForum.ru

C++ конец файла - C++

Восстановить пароль Регистрация
 
Cocozub
2 / 2 / 0
Регистрация: 09.10.2013
Сообщений: 104
Завершенные тесты: 1
23.10.2013, 17:06     C++ конец файла #1
Имеется файл с данными типа forestry и функция которая выводит на экран его содержимое
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
void output_all (void)
{
    forestry temp;
    FILE *f;
    if((f = fopen ("forestry.txt", "rb")) == NULL)
        exit(1);
    while (!feof (f))
    {   
        int result = fread (&temp, sizeof ( forestry), 1, f);
        out (temp, f);
    } 
    fclose (f);
}
Почему цикл выполняется на 1 раз больше чем должен и последний элемент выводится дважды ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2013, 17:06     C++ конец файла
Посмотрите здесь:

Запись в конец файла C++
C++ конец файла
C++ Добавить в конец первого файла содержимое второго файла
Конец файла C++
Конец файла, но не совсем C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2013, 17:08     C++ конец файла #2
C++
1
2
3
4
5
6
while (1)
{   
     int result = fread (&temp, sizeof ( forestry), 1, f);
     if (feof (f)) break;
     out (temp, f);
}
Cocozub
2 / 2 / 0
Регистрация: 09.10.2013
Сообщений: 104
Завершенные тесты: 1
23.10.2013, 17:19  [ТС]     C++ конец файла #3
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
2
3
4
5
6
while (1)
{   
     int result = fread (&temp, sizeof ( forestry), 1, f);
     if (feof (f)) break;
     out (temp, f);
}
Для чего здесь переменная result ? Можете пояснить ваш вариант и почему не работает мой ?
gazlan
2867 / 1815 / 272
Регистрация: 27.08.2010
Сообщений: 4,921
Записей в блоге: 1
23.10.2013, 17:21     C++ конец файла #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void output_all()
{
   forestry    temp;
   
   FILE*    f = fopen("forestry.txt","rb");
   
   if (!f)
   {  
      exit(1);
   }
 
   while (fread(&temp,1,sizeof(forestry),f) == sizeof(forestry))
   {     
      out(temp);
   } 
 
   fclose (f);
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2013, 17:37     C++ конец файла #5
Цитата Сообщение от Cocozub Посмотреть сообщение
Для чего здесь переменная result ?
Понятия не имею. fread() возвращает количество считанных символов.

Добавлено через 2 минуты
Цитата Сообщение от Cocozub Посмотреть сообщение
и почему не работает мой ?
В последней итерации цикла будет считан конец файла, в temp ничего не запишется, т.е., останется старое значение, которое и будет выведено во второй раз.
Cocozub
2 / 2 / 0
Регистрация: 09.10.2013
Сообщений: 104
Завершенные тесты: 1
23.10.2013, 17:38  [ТС]     C++ конец файла #6
Ясно, большое спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2013, 17:56     C++ конец файла
Еще ссылки по теме:

Удвоить размер файла, записав в конец файла все его исходные элементы C++
C++ Записать в конец файла
C++ Конец файла

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2013, 17:56     C++ конец файла #7
Тут даже лучше так написать:
C++
1
2
3
4
5
6
while (1)
{   
     int result = fread (&temp, sizeof ( forestry), 1, f);
     if (!result) break;
     out (temp, f);
}
Вывод будет, если только считан целый объект.
Yandex
Объявления
23.10.2013, 17:56     C++ конец файла
Ответ Создать тему
Опции темы

Текущее время: 12:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru