Не могу отфильтровать в структуре - C (СИ)
Формулировка задачи:
Все привет. Так как я только учусь, прошу помочь с заданием. Звучит оно так:"По каждой игрушке в магазине есть следующая информация: название игрушки, название категории игрушки, стоимость, возрастные границы детей, для которых предназначена игрушка. Ввести информацию по каждой игрушке в магазине. Напечатать информацию о тех игрушках , которые находятся в определенной категории, название которой вводиться с клавиатуры. Общее количество игрушек вводиться с клавиатуры." Вот код :
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(int a)
{
setlocale(LC_ALL, "rus");
printf("Введите общее кол-во игрушек : ");
for(int i=scanf("%d", &a);i!=1;scanf("%d",&a)){
printf("Неверно. Введите целое число"); }
struct toy {
char name[30];
char category[30];
char price[15];
char age[30];
};
struct toy *m[a];
int i=0;
for(i=0;i<a;i++){
m[i] = (struct toy*) malloc(sizeof(struct toy));
}
struct toy t[a];
for(i=0;i<a;i++){
printf("Введите название игрушки : ");
gets(m[i]->name);
printf("Введите категорию игрушки : ");
gets(m[i]->category);
printf("Введите цену : ");
gets(m[i]->price);
printf("Введите возрастные границы детей для которых предназначена игрушка : ");
gets(m[i]->age);
}
char otvet[30];
printf("Вы ввели всё количество игрушек\n");
printf("Введите категории , по которой вам предоставится информация по игрушкам: ");
scanf("%s", &otvet[30]);
for(i=0;i<a;i++){
if(otvet[30]==m[i]->category){
printf("Название игрушки : %s\n Цена игрушки : %s\n Возрастные границы : %s\n---------------------------\n", m[i]->name, m[i]->price, m[i]->age);
}
}
}Решение задачи: «Не могу отфильтровать в структуре»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LENGTH 16
struct Toy
{
char name[LENGTH], category[LENGTH], borders[LENGTH];
unsigned int cost;
};
int main()
{
unsigned int number_of_toys = 0;
char category[LENGTH];
printf("Number of toys: ");
scanf("%u", &number_of_toys);
struct Toy *toys = malloc(sizeof(struct Toy) * number_of_toys);
for (size_t i = 0; i < number_of_toys; ++i) {
printf("Name, category, borders, cost: ");
scanf("%s%s%s%u", &toys[i].name, &toys[i].category, &toys[i].borders, &toys[i].cost);
}
printf("Category: ");
scanf("%s", &category);
printf("Result: \n");
for (size_t i = 0; i < number_of_toys; ++i)
if (!strcmp(category, toys[i].category))
printf("%s %s %s %u \n", toys[i].name, toys[i].category, toys[i].borders, toys[i].cost);
}
Объяснение кода листинга программы
- Подключаются необходимые библиотеки
- Определяется длина поля в структуре Toy
- Создается структура Toy с полями name, category, borders и cost
- Инициализируется переменная number_of_toys, которая будет хранить количество игрушек
- Выводится запрос на ввод количества игрушек
- Выделяется память под массив структур Toy с помощью malloc
- В цикле запрашиваются и сохраняются данные об игрушках
- Выводится запрос на ввод категории
- В цикле выводятся данные об игрушках, соответствующих введенной категории
- Программа заканчивается