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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Cocozub
2 / 2 / 0
Регистрация: 09.10.2013
Сообщений: 104
Завершенные тесты: 1
#1

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

23.10.2013, 17:06. Просмотров 278. Ответов 6
Метки нет (Все метки)

Имеется файл с данными типа 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++
Почему, если я считываю текстовый файл: FILE *fp = fopen("123.txt", "rb+"); while(!feof(fp)) putchar(getc(fp)); ...

Конец файла - C++
Не могу разобраться,как правильно написать условие, типа: "если не конец файла и .....,то ....."

конец файла - C++
Всем привет! Читаю из файла числа: ifstream in("in.txt"); while(!in.eof()) {int f; in>>f; cout<<""<<f; ...

Запись в конец файла - C++
Создать текстовый файл message.txt (например в редакторе «Блокнот»), содержащий текстовое сообщение, состоящее из нескольких строк текста....

Зацикливание и конец файла - C++
Кусок кода: using std::cout; using std::cin; using std::tolower; using std::endl; std::ifstream...

Обойти конец файла. - C++
В файле с расширением .dat Находятся несколько концов файла-поэтому не могу считать его полностью. Как обойти эти хитрые концы файла?!

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 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
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 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
5416 / 4812 / 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++ конец файла
Еще ссылки по теме:

Конец файла EOF - C++
Начал заново учить программирование на c++ по книге Кернигана, Ритчи. Дошел до главы с EOF и никак не могу разобраться уже несколько часов....

Записать в конец файла - C++
Сделал всё по гайду: #include <fstream> #include <iostream> #include <cstdlib> #include <sstream> #include <string> using...

Запись в конец файла - C++
Доброго времени суток. Простенькая задачка: Есть вещественные числа, записанные в файл. Нужно посчитать их сумму и записать в конце...

Конец файла, но не совсем - C++
Чтобы указать системе конец файла (в консольном приложении) нужно нажать Ctrl+Z, а затем еще раз нажать клавишу Enter. Вопрос такой, если...


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 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++ конец файла
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru