Помогите исправить ошибку только в запросе. Например: ввод 3 записи 1 1 1 и т.д., 2 2 2 и т.д., 3 3 3 и т.д

В универсальном запросе делаю отсев с помощью функции удаления, если ищу по названию, стране и номеру аптеки, то выводит запись 1 1 1 и т.д. и 3 3 3 и т.д.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <Windows.h>
#define MAX 100

struct a {
    char naz[MAX],
        world[MAX];
    int num, id, day, mes, year;
    double price;
} apteka[MAX], poisk[MAX];

void protect(int *f)
{
    char h[MAX];
    int t, t1;
    scanf("%s%*c", h);
    fflush(stdin);
    t = 0;
    t1 = 1;
    while (h[t] != '\0')
    {
        if (h[t] < 48 || h[t] > 57)
        {
            t1 = 0;
        }
        t++;
    }
    if (t1 && h[0] != '\0')
    {
        *f = atoi(h);
    }
    else
    {
        *f = -1;
    }
}

void protect_int(int *f) {
    char h[MAX];
    int t, t1;
    fflush(stdin);
    gets_s(h);
    fflush(stdin);
    t = 0;
    t1 = 1;
    while (h[t] != '\0') {
        if (h[t] < 48 || h[t]>57) {
            t1 = 0;
        }
        t++;
    }
    if (t1&&h[0] != '\0') {
        *f = atoi(h);
    }
    else {
        *f = -1;
    }
}

// функция корриктеровки
int correct(struct a f[], struct a apteka[], int n, int nums)
{
    int j, g, i = 0;
    bool s = true;
    j = i;
    for (i; i < (n + j); i++)
    {
        if (apteka[i].id == nums)
        {
            s = false;
            puts("\nЧто вы хотите исправить ? \n"
                "1- Название\n"
                "2- Страна\n"
                "3- Дата\n"
                "4- Номер аптеки\n"
                "5- Цена\n");
            printf("\nВведите поле для корриктеровки: ");
            while (scanf_s("%d%*c", &g) == 0)
            {
                fflush(stdin);
                printf("\nНеправильный ввод\n");
                printf("\nВведите поле для корриктеровки: ");
                while (getchar() != '\n')
                    continue;
            }
            if (g == 1)
            {
                printf("\nВведите название лек-ва: ");
                fflush(stdin);
                gets_s(f[i].naz);
            }
            else if (g == 2)
            {
                printf("\nВведите страну производства лекарства: ");
                fflush(stdin);
                gets_s(f[i].world);
            }
            else if (g == 3)
            {
                printf("\nВведите дату лек-ва (Пример - 1.1.2020)\n");
                do {
                    printf("\nВведите день: ");
                    fflush(stdin);
                    protect(&f[i].day);
                } while (f[i].day < 0 || f[i].day > 30);
                do {
                    printf("\nВведите месяц: ");
                    fflush(stdin);
                    protect(&f[i].mes);
                } while (f[i].mes < 0 || f[i].mes > 12);
                do {
                    printf("\nВведите год (с 2010 до 2021): ");
                    fflush(stdin);
                    protect(&f[i].year);
                } while (f[i].year < 2010 || f[i].year > 2021);
            }
            else if (g == 4)
            {
                do {
                    printf("\nВведите номер аптеки лек-ва: ");
                    fflush(stdin);
                    protect(&f[i].num);
                } while (f[i].num < 0);
            }
            else if (g == 5)
            {
                printf("\nВведите цену лек-ва: ");
                fflush(stdin);
                while (scanf_s("%lf%*c", &f[i].price) == 0) // пишем %lf%*c т.к. плохо сробатывает scanf и gets_s
                {
                    fflush(stdin);
                    printf("\nНеправильный ввод\n");
                    printf("\nВведите цену лек-ва: ");
                    while (getchar() != '\n')
                        continue;
                }
            }
            else {
                printf("\nНепрвильный ввод поля");
            }
        }
    }
    if (s)
    {
        printf("\nНеправильный ввод номера лекарства");
        return 0;
    }

    return i;
}

//  функция добавление
int create(struct a f[], int i, int num, int t)
{
    int j;
    char t2;
    j = i;
    for (i; i < (num + j); i++)
    {
        apteka[i].id = i + 1;
        if (t)
        {
            t2 = '1';
        }
        else
        {
            printf("\nИзменить название лек-ва? [1] Да / [0] Нет: ");
            fflush(stdin);
            scanf("%c%*c", &t2);
        }
        if (t2 == '1')
        {
            printf("\nВвод %d лекарства\n", apteka[i].id);
            printf("\nВведите название лек-ва: ");
            fflush(stdin);
            gets_s(f[i].naz);
        }
        if (t)
        {
            t2 = '1';
        }
        else
        {
            printf("\nИзменить страну лек-ва? [1] Да / [0] Нет: ");
            fflush(stdin);
            scanf("%c%*c", &t2);
        }
        if (t2 == '1')
        {
            printf("\nВведите страну производства лекарства: ");
            fflush(stdin);
            gets_s(f[i].world);
        }
        if (t)
        {
            t2 = '1';
        }
        else
        {
            printf("\nИзменить дату лек-ва? [1] Да / [0] Нет: ");
            fflush(stdin);
            scanf("%c%*c", &t2);
        }
        if (t2 == '1')
        {
            printf("\nВведите дату лек-ва (Пример - 1.1.2020)\n");
            do {
                printf("\nВведите день: ");
                fflush(stdin);
                protect(&f[i].day);
            } while (f[i].day < 1 || f[i].day > 30);
            do {
                printf("\nВведите месяц: ");
                fflush(stdin);
                protect(&f[i].mes);
            } while (f[i].mes < 1 || f[i].mes > 12);
            do {
                printf("\nВведите год (с 2010 по 2021): ");
                fflush(stdin);
                protect(&f[i].year);
            } while (f[i].year < 2010|| f[i].year > 2021);
        }
        if (t)
        {
            t2 = '1';
        }
        else
        {
            printf("\nИзменить номер аптеки? [1] Да / [0] Нет: ");
            fflush(stdin);
            scanf("%c%*c", &t2);
        }
        if (t2 == '1')
        {
            do {
                printf("\nВведите номер аптеки лек-ва: ");
                fflush(stdin);
                protect(&f[i].num);
            } while (f[i].num < 1);
        }
        if (t)
        {
            t2 = '1';
        }
        else
        {
            printf("\nИзменить цену лек-ва? [1] Да / [0] Нет: ");
            fflush(stdin);
            scanf("%c%*c", &t2);
        }
        if (t2 == '1')
        {
            do {
                printf("\nВведите цену лек-ва: ");
                fflush(stdin);
                while (scanf_s("%lf%*c", &f[i].price) == 0) // пишем %lf%*c т.к. плохо сробатывает scanf и gets_s
                {
                    fflush(stdin);
                    printf("\nНеправильный ввод\n");
                    printf("\nВведите цену лек-ва: ");
                    while (getchar() != '\n')
                        continue;
                }
            } while (f[i].price < 1);
        }
    }

    return i;
}

// функция удаления
int delite(struct a apteka[], int nums, int n)
{
    bool fl = true;
    int i;
    for (i = 0; i < n; i++)
    {
        if (apteka[i].id == nums + 1)
        {
            fl = false;
            apteka[i] = apteka[i + 1];
        }
    }
    if (fl == false)
    {
        n = n - 1;
    }
    if (fl)
    {
        printf("\nНеправильный ввод номера лекарства\n");
    }

    return n, nums;
}

// функция вывода
void vivod(struct a apteka[], int n)
{
    int i;
    printf("\n======================================================================================================\n");
    printf("\nid\tНазвание лекарства       Страна             Дата             Номер аптеки    Цена\n");
    for (i = 0; i < n; i++)
    {
        printf("\n%2d      %11.11s            %10.11s           %2d.%2d.%2d       %d              %.2lf\n", apteka[i].id, apteka[i].naz, apteka[i].world, apteka[i].day, apteka[i].mes, apteka[i].year, apteka[i].num, apteka[i].price);
    }
    printf("\n======================================================================================================\n");
}

// функция запросы
int zapros(struct a apteka[], int n, struct a poisk[])
{
    int  l4, b[MAX], day2, mes2, year2, zap;
    double money;
    char l1[MAX], l2[MAX];
    do {
        printf("\nВведите 1 для универсальный запрос\nВведите 2 для запроса по каждому отдельному полю\nВведите 0 для выхода");
        printf("\nВведите команду: ");
        while (scanf("%d%*c", &zap) == 0)
        {
            fflush(stdin);
            printf("\nНеправильный ввод\n");
            printf("\nВведите команду: ");
            while (getchar() != '\n')
                continue;
        }
        if (zap == 0)
        {
            break;
        }
    } while (zap != 1 && zap != 2);
    if (zap == 1)
    {
        do {
            printf("\nИскать по названию лек-ва ? [1] Да / [0] Нет: ");
            fflush(stdin);
            while (scanf("%d%*c", &b[0]) == 0)
            {
                fflush(stdin);
                printf("\nНеправильный ввод\n");
                printf("\nИскать по названию лек-ва ? [1] Да / [0] Нет: ");
                while (getchar() != '\n')
                    continue;
            }
            fflush(stdin);
        } while (b[0] != 1 && b[0] != 0);
        if (b[0] == 1)
        {
            printf("\nВведите название лек-ва: ");
            fflush(stdin);
            scanf("%s", l1);
            fflush(stdin);
        }
        do {
            printf("\nИскать по стране производства? [1] Да / [0] Нет: ");
            fflush(stdin);
            while (scanf("%d%*c", &b[1]) == 0)
            {
                fflush(stdin);
                printf("\nНеправильный ввод\n");
                printf("\nИскать по стране производства ? [1] Да / [0] Нет: ");
                while (getchar() != '\n')
                    continue;
            }
            fflush(stdin);
        } while (b[1] != 1 && b[1] != 0);
        if (b[1] == 1)
        {
            printf("\nВведите страну производства: ");
            fflush(stdin);
            scanf("%s", l2);
            fflush(stdin);
        }
        do {
            printf("\nИскать по дате ? [1] Да / [0] Нет: ");
            fflush(stdin);
            while (scanf("%d%*c", &b[2]) == 0)
            {
                fflush(stdin);
                printf("\nНеправильный ввод\n");
                printf("\nИскать по дате ? [1] Да / [0] Нет: ");
                while (getchar() != '\n')
                    continue;
            }
            fflush(stdin);
        } while (b[2] != 1 && b[2] != 0);
        if (b[2] == 1)
        {
            printf("\nВведите дату лек-ва (Пример - 1.1.2020)\n");
            do {
                printf("\nВведите день: ");
                fflush(stdin);
                protect(&day2);
            } while (day2 < 1 || day2 > 30);
            do {
                printf("\nВведите месяц: ");
                fflush(stdin);
                protect(&mes2);
            } while (mes2 < 1 || mes2 > 12);
            do {
                printf("\nВведите год (с 2010 по 2021): ");
                fflush(stdin);
                protect(&year2);
            } while (year2 < 2010 || year2 > 2021);
        }
        do {
            printf("\nИскать по номеру аптеки? [1] Да / [0] Нет: ");
            fflush(stdin);
            while (scanf("%d%*c", &b[3]) == 0)
            {
                fflush(stdin);
                printf("\nНеправильный ввод\n");
                printf("\nИскать по номеру аптеки ? [1] Да / [0] Нет: ");
                while (getchar() != '\n')
                    continue;
            }
            fflush(stdin);
        } while(b[3] != 1 && b[3] != 0);
        if (b[3] == 1)
        {
            do {
                printf("\nВведите номер аптеки: ");
                protect(&l4);
            } while (l4 < 1);
        }
        do {
            printf("\nИскать по цене ? [1] Да / [0] Нет: ");
            fflush(stdin);
            while (scanf("%d%*c", &b[4]) == 0)
            {
                fflush(stdin);
                printf("\nНеправильный ввод\n");
                printf("\nИскать по цене ? [1] Да / [0] Нет: ");
                while (getchar() != '\n')
                    continue;
            }
            fflush(stdin);
        } while (b[4] != 1 && b[4] != 0);
        if (b[4] == 1)
        {
            do {
                printf("\nВведите цену: ");
                fflush(stdin);
                while (scanf("%lf%*c", &money) == 0)
                {
                    fflush(stdin);
                    printf("\nНеправильный ввод\n");
                    printf("\nВведите цену: ");
                    while (getchar() != '\n')
                        continue;
                }
            } while (money < 1);
        }
    }
    if (zap == 1)
    {
        poisk = apteka;
        if (b[0] == 1)
        {
            for (int i = 0; i < n; i++)
            {
                if (strcmp(poisk[i].naz, l1) == 1)
                {
                    n = delite(poisk, i, n);
                }
            }
        }

        if (b[1] == 1)
        {
            for (int i = 0; i < n; i++)
            {
                if (strcmp(poisk[i].world, l2) == 1)
                {
                    n = delite(poisk, i, n);
                }

            }
        }

        if (b[2] == 1)
        {
            for (int i = 0; i < n; i++)
            {
                if (poisk[i].day != day2)
                {
                    if (poisk[i].mes != mes2)
                    {
                        if (poisk[i].year != year2)
                        {
                            n = delite(poisk, i, n);
                        }
                    }
                }
            }
        }

        if (b[3] == 1)
        {
            for (int i = 0; i < n; i++)
            {
                if (poisk[i].num != l4)
                {
                    n = delite(poisk, i, n);
                }
            }
        }

        if (b[4] == 1)
        {
            for (int i = 0; i < n; i++)
            {
                if (poisk[i].price != money)
                {
                    n = delite(poisk, i, n);
                }
            }
        }
    }
    vivod(poisk, n);

    return 0;
}

int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int n = 0, num, t, proverka, proverka2, nums, q;
    bool flag = true, flag2 = true, fl = true;
    puts("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ");
    puts("\t\t\tЗдравствуйте! Данная программа поможет Вам в организации работы аптеки!\n");
    puts("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ");
    do {
        printf("\n\n|---------------------------------------------------------------------------------------------|");
        puts("\nСписок доступных команд"
            "\n 1 || Добавить элемент;"
            "\n 2 || Изменить список;"
            "\n 3 || Запрос;"
            "\n 4 || Вывод всех данных;"
            "\n 0 || Выход из программы");
        printf("|---------------------------------------------------------------------------------------------|\n\n");
        printf("\nВведите номер команды: ");
        while (scanf("%d", &proverka) == 0)
        {
            fflush(stdin);
            printf("\nНеправильный ввод\n");
            printf("\nВведите номер команды: ");
            while (getchar() != '\n')
                continue;
        }
        if (proverka == 1)
        {
            do {
                printf("\nВведите кол-во лекарcтв: ");
                protect(&num);
            } while (num < 0);
            t = 1;
            n = create(apteka, n, num, t);
            vivod(apteka, n);
            flag = false;
        }
        else if (proverka == 2)
        {
            if (!flag)
            {
                do {
                    printf("\nКорриктеровка\n");
                    printf("\nВведите 1 чтобы удалить\nВведите 2 чтобы изменить\nВведите 0 чтобы выйти\n");
                    printf("\nВведите номер команды: ");
                    while (scanf("%d%*c", &proverka2) == 0) // пишем %d%*c т.к. плохо сробатывает scanf и gets_s
                    {
                        fflush(stdin);
                        printf("\nНеправильный ввод\n");
                        printf("\nВведите номер команды: ");
                        while (getchar() != '\n')
                            continue;
                    }
                    if (proverka2 == 1)
                    {
                        do {
                            vivod(apteka, n);
                            printf("\nВведите номер лек-ва под удаления: ");
                            fflush(stdin);
                            while (scanf("%d", &nums) == 0)
                            {
                                fflush(stdin);
                                printf("\nНеправильный ввод\n");
                                printf("\nВведите номер лек-ва под удаления: ");
                                while (getchar() != '\n')
                                    continue;
                            }
                            n = delite(apteka, nums - 1, n);
                            vivod(apteka, n);
                            do {
                                printf("\nПродолжить удаление [1] Да / [0] Нет: ");
                                fflush(stdin);
                                while (scanf("%d", &proverka2) == 0)
                                {
                                    fflush(stdin);
                                    printf("\nНеправильный ввод\n");
                                    printf("\nВведите номер команды: ");
                                    while (getchar() != '\n')
                                        continue;
                                }
                            } while ((proverka2 == 1 && n == 0) || (proverka2 != 1 && proverka2 != 0));
                        } while (proverka2 == 1);
                    }
                    else if (proverka2 == 2)
                    {
                        do {
                            vivod(apteka, n);
                            do {
                                printf("\nВведите номер лек-ва под корриктеровку: ");
                                protect(&nums);
                            } while (nums < 0);
                            correct(apteka, apteka, n, nums);
                            printf("\nПродолжить изменение [1] Да / [0] Нет: ");
                            fflush(stdin);
                            while (scanf("%d%*c", &proverka2) == 0) // пишем %d%*c т.к. плохо сробатывает scanf и gets_s
                            {
                                fflush(stdin);
                                printf("\nНеправильный ввод\n");
                                printf("\nПродолжить изменение [1] Да / [0] Нет: ");
                                while (getchar() != '\n')
                                    continue;
                            }
                        } while (proverka2 == 1);
                    }
                    else
                    {
                        printf("\nНеправильный ввод\n");
                    }
                } while (proverka2 != 0);
            }
            else
            {
                printf("\nВы не ввели данные");
            }
        }
        else if (proverka == 3)
        {
            if (!flag)
            {
                do {
                    vivod(apteka, n);
                    zapros(apteka, n, poisk);
                    printf("\nПоиск заново ? [1] Да / [0] Нет: ");
                    fflush(stdin);
                    while (scanf("%d%*c", &q) == 0) // пишем %d%*c т.к. плохо сробатывает scanf и gets_s
                    {
                        fflush(stdin);
                        printf("\nНеправильный ввод\n");
                        printf("\nПоиск заново ? [1] Да / [0] Нет: ");
                        while (getchar() != '\n')
                            continue;
                    }
                } while (q != 0);
            }
            else {
                printf("\nДанные не введены");
            }
        }
        else if (proverka == 4)
        {
            if (!flag)
            {
                vivod(apteka, n);
            }
            else {
                printf("\nДанные не введены");
            }
        }
        else if (proverka == 0)
        {
            printf("\nВыход");
        }
        else {
            printf("\nНеправильный выбор номер команды\n");
        }
    } while (proverka != 0);

    return 0;
}

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