C/C++

Программа на C++

Программа записи введённых элементов структуру в файл и его чтение.
Уточните вопрос с учётом справочных данных:
https://ru.wikipedia.org/wiki/Дательный_падеж
https://ru.wikipedia.org/wiki/Родительный_падеж
ВШ
Владимир Шестаков
87 993
Лучший ответ
#include <stdio.h>
#include <stdlib.h>
struct person
{
char name[25];
int age;
};
int save(char * filename, struct person *p);
int load(char * filename);

int main(void)
{
char * filename = "person.dat";
struct person coder;
printf("\n Enter your name: ");
scanf("%s",&coder.name);
printf("\n Enter your age: ");
scanf("%d",&coder.age);
save(filename, &coder);
printf("\n Loading data from file: \n");
load(filename);
return 0;
}
// запись структуры в файл
int save(char * filename, struct person *p)
{
FILE * fp;
char *c;
int size = sizeof(struct person);
// количество записываемых байтов
if ((fp = fopen(filename, "wb")) == NULL)
{
perror("Error occured while opening file");
return 1;
}
// устанавливаем указатель на начало структуры
c = (char *)p;
// посимвольно записываем в файл структуру
for (int i = 0; i < size; i++)
{
putc(*c++, fp);
}
fclose(fp);
return 0;
}
// загрузка из файла структуры
int load(char * filename)
{
FILE * fp;
char *c;
int i; // для считывания одного символа
// количество считываемых байтов
int size = sizeof(struct person);
// выделяем память для считываемой
//структуры
struct person * ptr = (struct person *) malloc(size);
if ((fp = fopen(filename, "rb")) == NULL)
{
perror("Error occured while opening file");
return 1;
}
// устанавливаем указатель на
// начало блока выделенной памяти
c = (char *)ptr;
// считываем посимвольно из
//файла
while ((i = getc(fp))!=EOF)
{
*c = i;
c++;
}
fclose(fp);
// вывод на консоль
//загруженной структуры
printf("%-20s %5d \n", ptr->name, ptr->age);
free(ptr);
return 0;
}
Это конечно хорошо, а в чем вопрос то?