Пример выполнения работы. Структура книга (поля: ФИО автора, название, издательство, год издания, число страниц)
Условие задачи:
Структура книга (поля: ФИО автора, название, издательство, год издания, число страниц). Создается массив книг размерности n. Сохраняется в файле и читается из файла. Файл открывается в двоичном режиме.
Для решения задач в среде Microsoft Visual Studio 2013 были созданы стандартные консольные приложения (проект типа Win32 Console Application) с установленным свойством «пустой проект» (Empty project). В каждый из проектов добавлен файл с расширением .cpp, исходные коды которых приведены ниже.
Листинг программы с комментариями для записи в файл:
#include <stdio.h>
#include <stdlib.h>
struct BOOK // Структура - книга
{
char Author[64];
char Title[128];
char Firm[64];
int year, page;
};
int main(int argc, char* argv[])
{
int n; // Переменная, задающая число элементов массива
BOOK *pBook; // Указатель на массив структур
printf("n="); scanf_s("%d", &n); // Ввод числа книг
pBook = new BOOK[n]; // Выделяем память под массив структур (книг)
for (int i = 0; i<n; i++) // Цикл ввода данных о книгах с клавиатуры
{
printf("Book N=%d:\n", i + 1);
printf("Author: ");
fflush(stdin); gets_s(pBook[i].Author);
printf("Title: ");
fflush(stdin); gets_s(pBook[i].Title);
printf("Firm: ");
fflush(stdin); gets_s(pBook[i].Firm);
printf("year: "); scanf_s("%d", &pBook[i].year);
printf("page: "); scanf_s("%d", &pBook[i].page);
}
FILE *pF;
fopen_s(&pF, "MyBook.dat", "wb"); // Открываем файл для записи в двоичном режиме
fwrite(&n, sizeof(int), 1, pF); // Записываем в файл число элементов массива
fwrite(pBook, sizeof(BOOK), n, pF); // Записываем в файл массив книг
fclose(pF); // Закрываем файл
system("pause"); // Останавливаем программу, ждем нажатия любой клавиши
return 0;
}
Листинг программы с комментариями для чтения из файла:
#include <stdio.h>
#include <stdlib.h>
struct BOOK // Структура - книга
{
char Author[64];
char Title[128];
char Firm[64];
int year, page;
};
int main(int argc, char* argv[])
{
int n; // Переменная, задающая число элементов массива
BOOK *pBook; // Указатель на массив структур
FILE *pF;
fopen_s(&pF, "MyBook.dat", "rb");// Открываем файл для чтения в двоичном режиме
if (pF == 0) // Ошибка открытия файла, например, файл не существует
{
printf("Error, file not found");
return 1;
}
fread(&n, sizeof(int), 1, pF); // Читаем из файла число элементов массива
pBook = new BOOK[n]; // Выделяем память под массив структур (книг)
fread(pBook, sizeof(BOOK), n, pF); // Читаем из файла массив книг
fclose(pF); // Закрываем файл
for (int i = 0; i<n; i++) // Цикл вывода данных о книгах на экран
printf("%s. %s. %s, %d. - %d.\n", pBook[i].Author,
pBook[i].Title, pBook[i].Firm, pBook[i].year,
pBook[i].page);
system("pause"); // Останавливаем программу до нажатия любой клавиши
return 0;
}