Реализовать структуру User и написать функции записи в бинарный файл и чтения из бинарного файла - C (СИ)
Формулировка задачи:
Нужно создать двоичный файл структур. Выдает кучу ошибок, помогите исправить, пожалуйста
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
struct user {
int number[30];
char *author[30];
char *name[30];
int date1[30];
int date2[30];
char *surname[30];
} user_list[100];
int main() {
setlocale(LC_ALL, "rus");
void init_list(void), enter(void);
void delete(void), list(void);
void load(void), save(void);
int menu_select(void), find_free(void);
}
int main(void) {
char choice;
init_list(); /* инициализация массива структур */
for (;;) {
choice = menu_select();
switch (choice) {
case 1: enter();
break;
case 2: delete();
break;
case 3: list();
break;
case 4: save();
break;
case 5: load();
break;
case 6: exit(0);
}
}
return 0;
}
void init_list(void) {
register int t;
for (t = 0; t<2; ++t) user_list[t].name[0] = '\0';
}
/* Получения значения, выбранного в меню. */
int menu_select(void) {
char s[80];
int c;
printf("1. Enter name\n");
printf("2. Remove name\n");
printf("3. Output list\n");
printf("4. Save file\n");
printf("5. Load file\n");
printf("6. Clear list\n");
printf("7. Exit\n");
do {
printf("\nSelect choice: ");
gets_s(s);
c = atoi(s);
} while (c<0 || c>7); return c;
}
/* Добавление адреса в список. */
void enter(void) {
int slot;
char s[80];
slot = find_free();
if (slot == -1) {
printf("\n List is full ");
return;
}
printf("Enter number: ");
gets_s(user_list[slot].number);
printf("Enter author: ");
gets_s(user_list[slot].author);
printf("Enter name: ");
gets_s(user_list[slot].name);
printf("Enter date1: ");
gets_s(user_list[slot].date1);
printf("Enter date2: ");
gets_s(user_list[slot].date2);
printf("Enter surname: ");
gets_s(user_list[slot].surname);
/* Удаление адреса. */
void delete(void) {
register int slot;
char s[80];
printf(" Enter N of record : ");
gets_s(s);
slot = atoi(s);
if (slot >= 0 && slot < 100) user_list[slot].name[0] = '\0';
/* Вывод списка на экран. */
void list(void) {
register int t;
for (t = 0; t < MAX; ++t) {
if (addr_list[t].name[0]) {
printf("%s\n", user_list[t].number);
printf("%s\n", user_list[t].author);
printf("%s\n", user_list[t].name);
printf("%s\n", user_list[t].date1);
printf("%s\n", user_list[t].date2);
printf("%lu\n\n", user_list[t].surname);
}
}
printf("\n\n");
}
//Сохранить файл
void save(void) {
FILE *fp;
register int i;
int count;
errno = fopen_s(&fp, filename, "wb");
if (errno != 0) {
printf("Error due opening file\n");
return;
}
for (i = 0; i<MAX; i++)
if (user_list[i].name != '\0')
count = fwrite(&user_list[i], sizeof(struct user), 1, fp);
if (count != 1)
printf("Error due writing file\n");
fclose(fp);
/* Загрузить файл. */
void load(void) {
FILE *fp;
register int i;
if ((fp = fopen("maillist", "rb")) == NULL) {
printf(" Error due opening file.\n");
return;
}
init_list();
for (i = 0; i < MAX; i++)
if (fread(&addr_list[i],
sizeof(struct user), 1, fp) != 1) {
if (feof(fp)) break;
printf(" Error due reading file.\n");
}
fclose(fp);
}Решение задачи: «Реализовать структуру User и написать функции записи в бинарный файл и чтения из бинарного файла»
textual
Листинг программы
void init_list();
void enter();
void del();
void list();
void load();
void save();
int menu_select();
void find_free();
int main(void) {
setlocale(LC_ALL, "rus");
char choice;
init_list(); /* инициализация массива структур */
for (;;) {
choice = menu_select();
switch (choice) {
case 1: enter();
break;
case 2: del();
break;
case 3: list();
break;
case 4: save();
break;
case 5: load();
break;
case 6: exit(0);
}
}
return 0;
}
Объяснение кода листинга программы
- Объявлены функции: void init_list(); void enter(); void del(); void list(); void load(); void save(); int menu_select(); void find_free();
- В функции main() выполняется цикл, который продолжается до тех пор, пока пользователь не выберет пункт 6 в меню.
- Функция menu_select() возвращает номер выбранного пункта меню.
- В зависимости от выбранного пункта меню выполняется соответствующая функция: — при выборе пункта 1 выполняется функция enter(); — при выборе пункта 2 выполняется функция del(); — при выборе пункта 3 выполняется функция list(); — при выборе пункта 4 выполняется функция save(); — при выборе пункта 5 выполняется функция load(); — при выборе пункта 6 выполняется функция find_free();
- Функция init_list() инициализирует список пользователей.
- Функция enter() добавляет пользователя в список.
- Функция del() удаляет пользователя из списка.
- Функция list() выводит список пользователей на экран.
- Функция load() загружает список пользователей из файла.
- Функция save() сохраняет список пользователей в файл.
- Функция menu_select() выводит меню на экран и ожидает выбора пользователя.
- Функция find_free() выполняет поиск свободного пользователя в списке.