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

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

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

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

23.10.2013, 17:06. Просмотров 286. Ответов 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++):

Удвоить размер файла, записав в конец файла все его исходные элементы - C++
Дан файл целых чисел. Удвоить его размер, записав в конец файла все его исходные элементы (в том же порядке). Помогите пожалуйста!!!!

Добавить в конец первого файла содержимое второго файла - C++
Text6. Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла. Помогите пожалуйста с решением, а желательно с...

Написать программу копирования файла. В конец каждой строки файла дописать количество пробелов в строке - 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; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2013, 17:08 #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  [ТС] #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
3131 / 1906 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
23.10.2013, 17:21 #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
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2013, 17:37 #5
Цитата Сообщение от Cocozub Посмотреть сообщение
Для чего здесь переменная result ?
Понятия не имею. fread() возвращает количество считанных символов.

Добавлено через 2 минуты
Цитата Сообщение от Cocozub Посмотреть сообщение
и почему не работает мой ?
В последней итерации цикла будет считан конец файла, в temp ничего не запишется, т.е., останется старое значение, которое и будет выведено во второй раз.
Cocozub
2 / 2 / 0
Регистрация: 09.10.2013
Сообщений: 104
Завершенные тесты: 1
23.10.2013, 17:38  [ТС] #6
Ясно, большое спасибо.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2013, 17:56 #7
Тут даже лучше так написать:
C++
1
2
3
4
5
6
while (1)
{   
     int result = fread (&temp, sizeof ( forestry), 1, f);
     if (!result) break;
     out (temp, f);
}
Вывод будет, если только считан целый объект.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2013, 17:56
Привет! Вот еще темы с ответами:

Добавить в конец первого текстового файла содержимое второго текстового файла - C++
Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла.

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.10.2013, 17:56
Ответ Создать тему
Опции темы

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