@POBOGO
18 лет, учусь программировать.

Как записать/вывести динамическую структуру данных в/из файл?

Всем привет . У меня есть динамическая структура, мне нужно чтобы данные вводил пользователь и при новом запуске данные выводились. У меня получилось сделать только чтобы записывало один элемент, ну и выводило тоже один. Как сделать чтобы записывало множество элементов? Как узнать сколько элементов записано в документе?

Вот так я реализовал запись в документ.
/* Запись в документ */
		fwrite(&temper, sizeof(int), 1, file);
		fwrite(p_film, sizeof(p_film), 1, file);
		fclose(file);
	}
    fread(&temper, sizeof(int), 1, file);
	fread(p_film, sizeof(p_film), temper, file);
	fclose(file);

temper - это счётчик.
p_film - указатель на динамический массив.


Считываю данные с документа.
file = fopen("data.bin", "r");
	if (file == NULL) {
		file = fopen("data.bin", "w");
		fclose(file);
		file = fopen("data.txt", "r");
	}
    fread(&temper, sizeof(int), 1, file);
	fread(p_film, sizeof(p_film), temper, file);
	fclose(file);


Полный код

Додавання элемента
void add_new_item(films *p_film) {
	/* variables */
	char text[100];
	strcpy(text, "Додавання нового елемента");
	//
		print_table(text);
		file = fopen("data.bin", "a");
		printf("Введіть назву кінострічки:"); scanf_s("%s", &p_film->name_film,100);
		printf("Введіть режисера(ім'я та прізвище): "); scanf_s("%s %s", &p_film->producer_surname, 100, &p_film->producer_name, 100);
		printf("Введіть рік виходу в прокат. Формат(2000.04.05): "); scanf_s("%i.%i.%i", &p_film->date_i.year, &p_film->date_i.month, &p_film->date_i.day);
		printf("Введіть назву країни:"); scanf_s("%s", &p_film->name_country, 100);
		printf("Введіть вартість:"); scanf_s("%i", &p_film->price);
		printf("Введіть дохід:"); scanf_s("%i", &p_film->income);
		printf("Введіть прибуток:"); scanf_s("%i", &p_film->profit);
		printf("Введіть жанр:"); scanf_s("%s", &p_film->genre, 100);
		/* Запись в документ */
		fwrite(&temper, sizeof(int), 1, file);
		fwrite(p_film, sizeof(p_film), 1, file);
		//fwrite(p_film, sizeof(films), tz, file);
		fclose(file);
		SetConsoleTextAttribute(hConsole, (WORD)((0 << 4) | 2));
		printf("Успішно додано!\n");
		SetConsoleTextAttribute(hConsole, (WORD)((0 << 4) | 7));
		end_table();
		Sleep(2000);
	temper++;
	main_menu();
}

Чтения файла
int main() {
	SetConsoleCP(1251);
	//p_film[0] = { "Білгоград", "Сторожевський","Миколай", 1992,01,9, "Україна", 200, 200, 200, "Ужастик" };
	file = fopen("data.bin", "r");
	if (file == NULL) {
		file = fopen("data.bin", "w");
		fclose(file);
		file = fopen("data.txt", "r");
	}
    fread(&temper, sizeof(int), 1, file);
	fread(p_film, sizeof(p_film), temper, file);
	fclose(file);
	//
	SetConsoleOutputCP(1251);
	system("color 0F");
	main_menu();
	free(p_film);
	system("pause");
	retur

Ссылка на весь проект
  • Вопрос задан
  • 123 просмотра
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy
Android developer at Yandex
Пиши в файл сначала заголовок, в котором, в том числе, укажи количество элементов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы