выскакивает ошибка:Debug Assertion Failed! (public_stream!=nullptr) помогите пожалуйста что не так в коде


#include <stdlib.h>
#include <stdio.h>
#include <cstring>

struct TT
{
    char tiecher[40];
    char discipline[40];
    int course;
    int semestr;
    int audience;
};

TT data[10];

void ShowT(TT* data, int count);
void Edit(TT* data, int count);
void Add(TT* data, int count);
void Delete(TT* data, int count);
void Sort(TT* data, int count);
void Find(TT* data, int count);

using namespace std;

int Count = 10;

enum eCMD { CMD_EXIT = -1, CMD_NONE, CMD_READ, CMD_SHOW, CMD_EDIT, CMD_ADD, CMD_DELETE, CMD_SORT, CMD_FIND, CMD_SAVE, CMD_SAVE_2 };

extern bool change = false;
extern int Count;

void Readfile(TT* data, int* count)
{
    char filename[50];
    int str = 0;
    puts("Введите имя файла: ");
    scanf("%s", &filename);
    fflush(stdin);
    FILE* file = fopen(filename, "r");

    if (!file)
    {
        printf("Файл не обнаружен.");
    }
    else
    {
        while (!feof(file))
        {
            fscanf(file, "%[^;];%[^;];%d;%d;%dn", data[str].tiecher, data[str].discipline, &data[str].course, &data[str].semestr, &data[str].audience);
            ++str;
        }
        *count = str;
        fclose(file);
    }
}

void Savefile(TT* data, int* count)
{
    char filename[50];
    printf("Введите имя файла:");
    scanf("%s", &filename);
    fflush(stdin);
    char f;
    printf("Вы хотите сохранить в txt или в csv формате?(t/c)");
    scanf("%c", &f);
    fflush(stdin);
    FILE* file = fopen(filename, "w");

    if (f == 'c')
    {
        for (int i = 0; i < *count; i++)
        {
            fprintf(file, "%s;%s;%d;%d;%d\n", data[i].tiecher, data[i].discipline, &data[i].course, &data[i].semestr, &data[i].audience);
        }
    }
    else if (f == 't')
    {
        for (int i = 0; i < *count; i++)
        {
            fprintf(file, "%s;%s;%d;%d;%d\n", data[i].tiecher, data[i].discipline, &data[i].course, &data[i].semestr, &data[i].audience);
        }
    }
    fclose(file);
}

void Savefile_2(TT* data, int* count)
{
    FILE* file = fopen("Начальный.txt", "w");
    for (int i = 0; i < *count; i++)
    {
        fprintf(file, "%s;%s;%d;%d;%d\n", data[i].tiecher, data[i].discipline, &data[i].course, &data[i].semestr, &data[i].audience);
    }
    fclose(file);
}

TT Data[1000];

eCMD Menushow()
{
    while (true)
    {
        system("cls");
        puts("Выберите действие:");
        puts("1 - Открыть файл");
        puts("2 - Просмотр данных");
        puts("3 - Записать в файл");
        puts("4 - Записать в новый файл");
        puts("5 - Выход из программы");
        unsigned opt;
        fflush(stdin);
        scanf("%u", &opt);   // выбор действия
        switch (opt)
        {
        case 1: return CMD_READ;          //открыть файл
        case 2: return CMD_SHOW;          //просмотр данных
        case 3: return CMD_SAVE_2;        // Сохранить файл
        case 4: return CMD_SAVE;          // Сохранить в новый файл
        case 5: return CMD_EXIT;          // Выход
        default: puts("Вы ввели неправильную команду");
            system("pause");
        }
    }
}

int main()
{
    int count = 0;
    system("chcp 1251");
    eCMD cmd = CMD_NONE;
    int def_str = 0;
    FILE* def = fopen("Начальный.txt", "r");
    while (!feof(def))
    {
        fscanf(def, "%[^;];%[^;];%d;%d;%d\n", Data[def_str].tiecher, Data[def_str].discipline, &Data[def_str].course, &Data[def_str].semestr, &Data[def_str].audience);
        ++def_str;
    }
    Count = def_str;
    while (true)
    {
        cmd = Menushow();
        if (cmd == CMD_EXIT)
        {
            char t;
            if (change == true)
            {
                printf("Файл был изменён. Хотитет сохранить данные?(y/n)");
                fflush(stdin);
                scanf("%c", &t);
                if (t == 'y')
                {
                    Savefile(Data, &Count);
                    puts("Файл успешно сохранён");
                    system("pause");
                    return 0;
                }
                else if (t == 'n')
                {
                    puts("Работа завершена");
                    system("pause");
                    return 0;
                }
            }
            else
            {
                puts("Работа завершена");
                system("pause");
                return 0;
            }
        }
        switch (cmd)
        {
        case CMD_SHOW: ShowT(Data, Count); break;
        case CMD_READ: Readfile(Data, &Count); break;
        case CMD_SAVE: Savefile(Data, &Count); break;
        case CMD_SAVE_2: Savefile_2(Data, &Count); break;
        }
    }
    puts("Работа завершена");
    system("pause");
    return 0;
}

void ShowT(TT* data, int count)
{
    eCMD cmd = CMD_NONE; // Инициализируем cmd значением CMD_NONE

    while (true)
    {

        system("chcp 1251");

        system("cls");

        const char* t_tiecher = "Преподаватель";
        const char* t_discipline = "Дисциплина";
        const char* t_course = "Курс";
        const char* t_semestr = "Семестр";
        const char* t_audience = "Аудитория";

        printf("------------------------------------------------\n");
        printf("| № |%10s|%10s|%10d|%9d|%10d|\n", t_tiecher, t_discipline, t_course, t_semestr, t_audience);
        printf("------------------------------------------------\n");

        for (int i = 0; i < count; i++)
        {

            printf("|%-3d|%10s|%10s|%10d|%9d|%10d|\n", i + 1, data[i].tiecher, data[i].discipline, data[i].course, data[i].semestr, data[i].audience);
            printf("------------------------------------------------\n");
        }

        cmd = Menushow();

        if (cmd == CMD_EXIT)
        {

            break;
        }

        switch (cmd)
        {
        case CMD_EDIT: Edit(data, count); break;
        case CMD_ADD:  Add(data, count); break;
        case CMD_DELETE: Delete(data, count); break;
        case CMD_SORT: Sort(data, count); break;
        case CMD_FIND: Find(data, count); break;
            //case CMD_CALC: Calc(data, count); break;
        }
    }
}

void Edit(TT* data, int count)
{
    int s, k;
    TT y;
    printf("Введите номер строки, которую хотите изменить:");
    scanf("%d", &s);
    system("cls");
    printf("-----------------------------------------------------------------------------\n");
    printf("|%-20s|%-10s|%-20d|%-20d|%-20d|\n", data[s - 1].tiecher, data[s - 1].discipline, data[s - 1].course, data[s - 1].semestr, data[s - 1].audience);
    printf("-----------------------------------------------------------------------------\n");
    fflush(stdin);
    printf("Введите номер столбца, который хотите изменить:");
    scanf("%d", &k);
    switch (k)
    {
    case 1: fflush(stdin);
        printf("Введите преподавателя: ");
        scanf("%39[^\n]", y.tiecher);
        strcpy(data[s - 1].tiecher, y.tiecher);
        change = 1;
        break;
    case 2: fflush(stdin);
        printf("Введите дисциплину: ");
        scanf("%39[^\n]", y.discipline);
        strcpy(data[s - 1].discipline, y.discipline);
        change = 1;
        break;
    case 3: fflush(stdin);
        printf("Введите курс: ");
        scanf("%d", &y.course);
        data[s - 1].course = y.course;
        change = 1;
        break;
    case 4: fflush(stdin);
        printf("Введите семестр: ");
        scanf("%d", &y.semestr);
        data[s - 1].semestr = y.semestr;
        change = 1;
        break;
    case 5: fflush(stdin);
        printf("Введите аудиторию: ");
        scanf("%d", &y.audience);
        data[s - 1].audience = y.audience;
        change = 1;
        break;
    }
}

void Sort(TT* data, int count)
{
    system("chcp 1251");
    int g = 0;
    char f;
    printf("Введите номер столбца, который хотите сортировать(1-5): ");
    scanf("%d", &g);
    fflush(stdin);
    printf("Сортировать по возрастанию (y\\n): ");
    scanf("%c", &f);
    fflush(stdin);
    if (g > 0 && g < 6)
    {
        int i, j;
        printf("%c", f);
        TT tmp;
        for (i = 0; i < count - 1; ++i)
        {
            for (j = 0; j < count - 1; ++j)
            {
                if (f == 'y')
                {
                    switch (g)
                    {
                    case 1:
                        if (strcmp(data[j].tiecher, data[j + 1].tiecher) > 0)
                        {
                            tmp = data[j + 1];
                            data[j + 1] = data[j];
                            data[j] = tmp;
                        }; break;
                    case 2:
                        if (strcmp(data[j].discipline, data[j + 1].discipline) > 0)
                        {
                            tmp = data[j + 1];
                            data[j + 1] = data[j];
                            data[j] = tmp;
                        }; break;
                    case 3:
                        if (data[j + 1].course < data[j].course)
                        {
                            tmp = data[j + 1];
                            data[j + 1] = data[j];
                            data[j] = tmp;
                        }; break;
                    case 4:
                        if (data[j + 1].semestr < data[j].semestr)
                        {
                            tmp = data[j + 1];
                            data[j + 1] = data[j];
                            data[j] = tmp;
                        }; break;
                    case 5:
                        if (data[j + 1].audience < data[j].audience)
                        {
                            tmp = data[j + 1];
                            data[j + 1] = data[j];
                            data[j] = tmp;
                        }; break;
                    }
                }
                else if (f == 'n')
                {
                    switch (g)
                    {
                    case 1:
                        if (strcmp(data[j].tiecher, data[j + 1].tiecher) < 0)
                        {
                            tmp = data[j + 1];
                            data[j + 1] = data[j];
                            data[j] = tmp;
                        }; break;
                    case 2:
                        if (strcmp(data[j].discipline, data[j + 1].discipline) < 0)
                        {
                            tmp = data[j + 1];
                            data[j + 1] = data[j];
                            data[j] = tmp;
                        }; break;
                    case 3:
                        if (data[j + 1].course > data[j].course)
                        {
                            tmp = data[j + 1];
                            data[j + 1] = data[j];
                            data[j] = tmp;
                        }; break;
                    case 4:
                        if (data[j + 1].semestr > data[j].semestr)
                        {
                            tmp = data[j + 1];
                            data[j + 1] = data[j];
                            data[j] = tmp;
                        }; break;
                    case 5:
                        if (data[j + 1].audience > data[j].audience)
                        {
                            tmp = data[j + 1];
                            data[j + 1] = data[j];
                            data[j] = tmp;
                        }; break;
                    }
                }
            }
        }
    }
    else
    {
        printf("Вы ввели неверный номер столбца");
    }
    change = 1;
}

void Add(TT* data, int count)
{
    system("cls");
    fflush(stdin);
    printf("Введите преподавателя: ");
    scanf("%39[^\n]", data[count].tiecher);
    fflush(stdin);
    printf("Введите дисциплину: ");
    scanf("%39[^\n]", data[count].discipline);
    fflush(stdin);
    printf("Введите курс: ");
    scanf("%d]", &data[count].course);
    fflush(stdin);
    printf("Введите семестр: ");
    scanf("%d", &data[count].semestr);
    printf("Введите аудитория: ");
    scanf("%d", &data[count].audience);
    count++;
    change = 1;
}

void Delete(TT* data, int count)
{
    int s;
    printf("Введите номер строки, которую хотите удалить?(Если удалять передумал, жми 0)");
    scanf("%d", &s);
    s--;
    if (s >= 0)
    {
        for (; s < count; s++)
        {
            strcpy(data[s].tiecher, data[s + 1].tiecher);
            strcpy(data[s].discipline, data[s + 1].discipline);
            data[s].course = data[s + 1].course;
            data[s].semestr = data[s + 1].semestr;
            data[s].audience = data[s + 1].audience;
        }
        count--;
        change = 1;
        system("cls");
    }
}

void Find(TT* data, int count)
{
    char s[40];
    int O;
    printf("Введите номер столбца по которому хотите осуществить поиск (1-2):");
    scanf("%d", &O);
    switch (O)
    {
    case 1:system("cls");
        printf("Введите преподавателя для поиска:");
        fflush(stdin);
        scanf("%39[^n]", s);
        fflush(stdin);
        for (int l = 0; l < count; l++)
        {
            if (strcmp(s, data[l].tiecher) == 0)
            {
                printf("-------------------------------------------------------------------n");
                printf("|%-20s|%-10s|%-20d|%-10.2d ||%-10d|n", data[l].tiecher, data[l].discipline, data[l].course, data[l].semestr, data[l].audience);
                printf("-------------------------------------------------------------------n");
            }
        }
        break;
    case 2:system("cls");
        printf("Введите дисциплину для поиска:");
        fflush(stdin);
        scanf("%39[^n]", s);
        fflush(stdin);
        for (int l = 0; l < count; l++)
        {
            if (strcmp(s, data[l].discipline) == 0)
            {
                printf("-------------------------------------------------------------------n");
                printf("|%-20s|%-10s|%-20d|%-10d  ||%-10d|n", data[l].tiecher, data[l].discipline, data[l].course, data[l].semestr, data[l].audience);
                printf("-------------------------------------------------------------------n");
            }
        }
        break;
    default: printf("Неправильно введен номер столбца"); break;
    }
    system("pause");
}```

Ответы (0 шт):