Загрузить данные из файла в виде структур - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Подскажите пожалуйста, есть структура с данными:
Листинг программы
  1. struct Book{
  2. char title[30];
  3. char author[30];
  4. short pages;
  5. double price;
  6. };
эти данные без проблем сохраняю в файл так:
Листинг программы
  1. for (int i=0;i<n;i++)
  2. {
  3. fprintf(ff, "%s\n%s\n%d\n%f\n\n", s[i]->title, s[i]->author, s[i]->pages, s[i]->price);
  4. }
а вот восстановить из файла не получается. вот пример того как пытаюсь сделать: текстовый файл:
Zolotoy telenok 1Il`f i petrov 123 1000.000000 Konek gorbunok Ershov 12 4.000000
с него пытаюсь считать данные. пока видится два варианта, это строковым способом считать или блочным. вот блочным пытаюсь:
Листинг программы
  1. Book** LoadFile(Book **s, int &n)
  2. {
  3. char fname [255]="1.txt";
  4. FILE *ff=fopen (fname, "r");
  5. fread(s, sizeof (Book), n, ff);
естественно не правильно, в s записывается всякий бред. и вот текстовым пробую, пока так, но всё равно строка для переменной a считывается не полностью а до первого пробела, вобщем тоже не правильно. плюс на новую строку не переходит для считывания. не ясно как передвигаться по файлу.
Листинг программы
  1. Book** LoadFile(Book **s, int &n)
  2. {
  3. char fname [255]="1.txt";
  4. FILE *ff=fopen (fname, "r");
  5. char a[255],b[255];
  6. int c;
  7. float d;
  8. fscanf(ff, "%s\n%s\n%d\n%f\n\n", &a, &b, &c, &d);
  9. cout<<c;
подскажите каким способом лучше делать ну и намекните в каком направлении двигаться. премного благодарен за помощь

Решение задачи: «Загрузить данные из файла в виде структур»

textual
Листинг программы
  1. #include <iostream.h>
  2.  
  3. #include <fstream.h>
  4.  
  5. void main(void)
  6.  
  7. {
  8.    struct employee
  9.  
  10.    {
  11.       char name [6 4] ;
  12.       int age;
  13.       float salary;
  14.    } worker = { "Джон Дой", 33, 25000.0 };
  15.  
  16.    ifstream emp_file("EMPLOYEE.DAT");
  17.    emp_file.read((char *) &worker, sizeof(employee));
  18.    cout << worker.name << endl;
  19.    cout << worker.age << endl;
  20.    cout << worker.salary << endl;
  21. }

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы: iostream.h и fstream.h
  2. Определяется структура employee, которая содержит поля: name (строка, вмещающая 6 символов), age (целое число) и salary (число с плавающей точкой).
  3. Создается экземпляр структуры employee с именем worker, и инициализируются его поля: Джон Дой (name), 33 (age), 25000.0 (salary).
  4. Открывается файл EMPLOYEE.DAT для чтения.
  5. Файл считывается начиная с адреса памяти, содержащего структуру employee, с использованием оператора read.
  6. Выводятся значения полей структуры worker: name, age, salary.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы