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

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

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

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

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

textual
Листинг программы
#include <iostream.h> 
 
#include <fstream.h> 
 
void main(void) 
 
{ 
   struct employee 
 
   { 
      char name [6 4] ; 
      int age; 
      float salary; 
   } worker = { "Джон Дой", 33, 25000.0 }; 
 
   ifstream emp_file("EMPLOYEE.DAT"); 
   emp_file.read((char *) &worker, sizeof(employee)); 
   cout << worker.name << endl; 
   cout << worker.age << endl; 
   cout << worker.salary << endl; 
}

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

  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
Похожие ответы