Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Ullaluna
8 / 6 / 1
Регистрация: 11.11.2013
Сообщений: 75
#1

Считать из файла структуры в массив (указателей) - C++

14.01.2014, 01:37. Просмотров 296. Ответов 4
Метки нет (Все метки)

Ребята, как это грамотно сделать? Мой моск вскипел. Файл бинарный, количество экземпляров всегда одно и то же. В программе эти структуры обрабатываются, значения изменяются, затем снова записываются в файл. Вот эта функция адекватно работает только для первого элемента массива:

C++
1
2
3
4
struct dates {
  char[10] name;
  int serNumber;
  double volume;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dates* readFile(int arrsize) {
  dates data1, data2_temp;
  dates *arrofStruct[arrsize];
  int i = 0;
  dStream=fopen("binfile", "rb");
  fread(&data1, sizeof(dates), 1, dStream);
  
  do {
    
   data2_temp = data1;
   *arrofStruct[i] = data1;
   i++;
  }
  while (fread(&data1, sizeof(dates), 1, dStream));
  fclose(dStream);
  
  return *arrofStruct;
}
Что-то я напутала с адресами?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2014, 01:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считать из файла структуры в массив (указателей) (C++):

Считать определенный пункт структуры из файла и записать в массив - C++
Имеется структура записанная в файл, как считать опрделенный пункт структуры и записать в массив?

Массив указателей на структуры - C++
Хочу сделать тел. справочник через массив указателей на структуры, но получаю нечто такое: size_t size = 256; cont_info_**...

Структуры, массив указателей на функции - C++
Подскажите пожалуйста, в чем ошибка в данном коде: 1>Source.obj : error LNK2005: "bool (__cdecl** mark)(double,double)"...

Копировать массив указателей на структуры в очередь - C++
Я пишу курсач на тему создания динамических структурных переменых оформленных в виде очереди. Мне нужно редактировать созданные структурные...

Создайте динамический массив указателей на структуры - C++
Задача: дана структура struct Sample { char c; double x; int *p; }; Создайте динамический массив указателей на...

Шаблон структуры данных - массив указателей на заголовки списков - C++
Мне выдали задание на курсовую работу: "Шаблон структуры данных - массив указателей на заголовки списков. Элемент списка содержит...

4
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
14.01.2014, 01:47 #2
Не понятно для чего вам нужно вот эта строка?
C++
1
data2_temp = data1;
И ошибка скорей всего вот в этой строке 6 и 14. Т.к если смотреть на офф-источник http://www.cplusplus.com/reference/cstdio/fread/ (не реклама), то там процедура fread 2 аргумент имеет кол-во, а третий как раз таки размер считываемых данных, а у вас все наоборот.
0
Ullaluna
8 / 6 / 1
Регистрация: 11.11.2013
Сообщений: 75
14.01.2014, 01:53  [ТС] #3
Цитата Сообщение от Bend3r Посмотреть сообщение
Не понятно для чего вам нужно вот эта строка?
Это рудимент с предыдущего варианта функции. Не нужен, забыла удалить.

Цитата Сообщение от Bend3r Посмотреть сообщение
процедура fread 2 аргумент имеет кол-во, а третий как раз таки размер считываемых данных
Разве?
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
Считываем по одной структуре за раз. Размера данной структуры. Что не так?
0
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
14.01.2014, 02:17 #4
Цитата Сообщение от Ullaluna Посмотреть сообщение
Считываем по одной структуре за раз. Размера данной структуры. Что не так?
C++
1
fread(&data1, sizeof(dates), 1, dStream);
вот как написали вы. Получается количество равно размеру, в общем попробуйте поменять местами 2 и 3 аргумент. Вот так.
C++
1
fread(&data1, 1, sizeof(dates), dStream);
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.01.2014, 21:24 #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
struct dates 
{
    char name[10];
    int serNumber;
    double volume;
};
 
 
dates* readFile(int arrsize) 
{
  dates* arrofStruct = new dates[arrsize];
  
  FILE* dStream = fopen("binfile", "rb");
  if (!dStream) 
  {
      printf("Error opening binfile!");
      return;
  }
  
  int i = 0;
  while (fread(&arrofStruct[i], sizeof(dates), 1, dStream))
  {
      i++;
      if (i == arrsize) break;
  }
  
  fclose(dStream);
  
  return arrofStruct;
}
0
14.01.2014, 21:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2014, 21:24
Привет! Вот еще темы с ответами:

Как считать из файла символы и цифры одновременно? Структуры - C++
Имеется файл txt с таким заполнением: Gingi 25 12 1 Klinl 36 74 1 Frogo 963 32 2 Hlolo 69 85 1 Frodo 369 42 2 Ringo 951 43 1 ...

Нужно записать массив в файл, а потом из этого файла считать этот же массив - C++
Помогите, пожалуйста, никогда с файлами делов не имела. Нужно записать массив в файл, а потом из этого файла считать этот же массив. ...

Массив указателей на массив строк и сортировка массива указателей - C++
Добрый день. Поступил вопрос. Есть задача. У нас встроенный массив char mass;.Мы вводим строки до тех пор, пока не будет заполнен массив...

Считать массив А с файла a.txt. после чего сформировать массив С в котором все отрицательные элементы с масси - C++
Помогите написать программу на C++. Изучала этот язык меньше пол года, пока есть проблемы. очень нужна ваша помощь Считать массив А с файла...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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