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

while(!feof(f) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
Miwa123
37 / 37 / 1
Регистрация: 16.04.2013
Сообщений: 317
Записей в блоге: 1
20.06.2013, 21:47     while(!feof(f) #1
C++
1
2
3
4
5
6
7
8
9
10
11
while(!feof(f))
{
cout<<"Абитуриент номер "<<(i+1)<<": "<<endl;
enrollee *mas=new enrollee;
fread(&(*mas), sizeof(enrollee),1,f);
cout<<"ФИО: "<<mas->FIO<<endl;
cout<<"Год рождения: "<<mas->year<<endl;
cout<<"Оценки вступительных экзаменов(напр. 3,3,3): "<<mas->eval<<endl;
cout<<"Средний бал аттестата: "<<mas->sr_eval<<endl;
i++
}
вывожу информацию блоками. и в итоге когда дохожу до последнего блока, я его считываю. указатель видимо стоит на последнем байте(но не на конечном, как нужно) текстового документа и заставляет запустить цикл еще раз. очевидно, что на след итерации в блок попадает мусор. помогите!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
20.06.2013, 22:15     while(!feof(f) #2
а нечего глупую конструкцию
C++
1
while(!feof(f))
использовать
вот как надо:
C++
1
while(fread(...))
BAADF00D
Заблокирован
20.06.2013, 22:38     while(!feof(f) #3
Цитата Сообщение от Thinker Посмотреть сообщение
вот как надо:
C
1
while ( (ret = fread(...)) != EOF)
Добавлено через 1 минуту
Miwa123, в конце цикла вызови delete.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
21.06.2013, 16:18     while(!feof(f) #4
Цитата Сообщение от BAADF00D Посмотреть сообщение
C
1
while ( (ret = fread(...)) != EOF)
функция fread возвращает количество успешно считанных компонент, поэтому все было правильно, нет здесь EOF!
http://www.cplusplus.com/reference/cstdio/fread/
BAADF00D
Заблокирован
22.06.2013, 00:03     while(!feof(f) #5
Да. Забыл уже. Вот примерчик
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
  FILE *fp;
  float bal[5] = { 1.1F, 2.2F, 3.3F, 4.4F, 5.5F };
  int i;
 
  /* запись значений */
  if((fp=fopen("test", "wb"))==NULL) {
    printf("Не удаётся отрыть файл.\n");
    exit(1);
  }
 
  if(fwrite(bal, sizeof(float), 5, fp) != 5) 
    printf("Ошибка при записи файла.");
  fclose(fp);
 
  /* чтение значений */
  if((fp=fopen("test", "rb"))==NULL) {
    printf("Не удаётся отрыть файл.\n");
    exit(1);
  }
 
  if(fread(bal, sizeof(float), 5, fp) != 5) {
    if(feof(fp)) printf("Преждевременное достижение конца файла.");
    else printf("Ошибка при чтении файла.");
  }
  fclose(fp);
 
  for(i=0; i<5; i++)
    printf("%f ", bal[i]);  
 
  return 0;
}
Yandex
Объявления
22.06.2013, 00:03     while(!feof(f)
Ответ Создать тему
Опции темы

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