Реализовать структуру 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() выполняет поиск свободного пользователя в списке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д