Помогите исправить ошибку только в запросе. Например: ввод 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;
}