Реализовать структуру 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;
}

Объяснение кода листинга программы

  1. Объявлены функции: void init_list(); void enter(); void del(); void list(); void load(); void save(); int menu_select(); void find_free();
  2. В функции main() выполняется цикл, который продолжается до тех пор, пока пользователь не выберет пункт 6 в меню.
  3. Функция menu_select() возвращает номер выбранного пункта меню.
  4. В зависимости от выбранного пункта меню выполняется соответствующая функция: — при выборе пункта 1 выполняется функция enter(); — при выборе пункта 2 выполняется функция del(); — при выборе пункта 3 выполняется функция list(); — при выборе пункта 4 выполняется функция save(); — при выборе пункта 5 выполняется функция load(); — при выборе пункта 6 выполняется функция find_free();
  5. Функция init_list() инициализирует список пользователей.
  6. Функция enter() добавляет пользователя в список.
  7. Функция del() удаляет пользователя из списка.
  8. Функция list() выводит список пользователей на экран.
  9. Функция load() загружает список пользователей из файла.
  10. Функция save() сохраняет список пользователей в файл.
  11. Функция menu_select() выводит меню на экран и ожидает выбора пользователя.
  12. Функция find_free() выполняет поиск свободного пользователя в списке.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы