Загрузить данные из файла в виде структур - C (СИ)
Формулировка задачи:
Подскажите пожалуйста, есть структура с данными:
эти данные без проблем сохраняю в файл так:
а вот восстановить из файла не получается.
вот пример того как пытаюсь сделать:
текстовый файл:
с него пытаюсь считать данные.
пока видится два варианта, это строковым способом считать или блочным.
вот блочным пытаюсь:
естественно не правильно, в s записывается всякий бред.
и вот текстовым пробую, пока так, но всё равно строка для переменной a считывается не полностью а до первого пробела, вобщем тоже не правильно. плюс на новую строку не переходит для считывания. не ясно как передвигаться по файлу.
подскажите каким способом лучше делать ну и намекните в каком направлении двигаться.
премного благодарен за помощь
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);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;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: iostream.h и fstream.h
- Определяется структура employee, которая содержит поля: name (строка, вмещающая 6 символов), age (целое число) и salary (число с плавающей точкой).
- Создается экземпляр структуры employee с именем worker, и инициализируются его поля:
Джон Дой(name), 33 (age), 25000.0 (salary). - Открывается файл EMPLOYEE.DAT для чтения.
- Файл считывается начиная с адреса памяти, содержащего структуру employee, с использованием оператора read.
- Выводятся значения полей структуры worker: name, age, salary.