C/C++

C++ | Структуры и массивы структур. Помогите пожалуйста!

Постановка задачи:
1. Сформировать массив из элементов структурного типа. Структурный тип определен в варианте. Ввести данные для десяти элементов массива.
2. Вывести массив на экран.
3. Выполнить поиск элементов в массиве, удовлетворяющих заданному в варианте условию. Вывести найденные элементы на экран. В случае отсутствия таких элементов, вывести сообщение об этом.

Задание:
Определить структурный тип для представления анкеты ребенка, состоящей из его имени, пола и роста. Определить средний рост девочек. Вывести данные по девочкам, чье имя совпадает с введенным с клавиатуры.
#include <iostream>
#include <iomanip>
#include <vector>
#include <Windows.h>
using namespace std;

struct child
{
string name{}; //имя
uint16_t height{}; //рост
bool ismale{}; //пол
};

void print(vector<child>& vec, string name = "")
{
bool chk = false;
for (auto& i : vec)
if (i.name == name || !name.length()) {
cout << setw(10) << i.name << setw(7) << i.height << endl; chk = true;
}
if (name.length() && !chk) cout << "Данного имени нет в списках\n";
}

child generator()
{
static string male[]{ "Илья","Иван","Саша","Коля","Серёжа","Олег","Миша","Ильдар","Ахмед","Вася","Толя","Витя"};
static string female[]{ "Оля","Инна","Аня","Катя","Илона","Вика","Галя","Надя","Света","Роксолана","Мадлен","Славя" };
bool imale = rand() % 2;
string name = imale ? male[rand() % 12] : female[rand() % 12];
uint16_t h = 120 + rand() % 20 + (imale ? 15 : 0);
child res{ name,h,imale };
return res;
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
srand(static_cast<unsigned int>(time(nullptr)));
size_t size;
cout << "Сколько детей?\n";
cin >> size;
vector<child>childs(size);
for (auto& i : childs) i = generator();
child *finde = &childs[0];
print(childs);
double height{};
size = 0;
for (auto& i : childs)
{
!i.ismale ? height += i.height,size++ : NULL;
}
height /= size;
if (!height) cout << "Девочек в списке нет\n"; else cout << "Средний рост девочек: " << setprecision(2) << fixed << height << " см\n";
cout << "Введите имя для поиска:\n";
string name;
cin >> name;
print(childs, name);
}
Олег Александров
Олег Александров
51 416
Лучший ответ
Владимир Зенкин Спасибо вам большое! Вы молодец!
Суйениш Даурен помогите и мне, пожалуйста, у меня примерно такое же задание. буду вам очень признателен!!!
Владимир Зенкин Сергей Степанов. Преподаватель просит чтобы у нас элементы массива (имя, пол, рост) были в int main, и чтобы бы была отдельной функцией средний рост девочек. Помогите пожалуйста!
Владимир Зенкин Надо чтобы выглядело примерно так
Препод сказал из прошлой практики посмотреть как надо сделать элементы массива
Владимир Зенкин помогите пожалуйста! исправить
Олег Александров https://pastebin.com/nHte14iJ

убрал поиск по имени, убрал средний рост, добавил поиск по полу, размер спика - 10
Владимир Зенкин средний рост не надо убирать и поиск по имени. исправьте пожалуйста
#include <iostream>
#include <string>

using namespace std;

const int size = 10;

struct anketa
{
string name;
string gender;
float rost;
};

void insert(anketa A[size])
{
cout << endl << "\tВвод данных:" << endl;
for(int x = 0; x < size; x++)
{
cout << endl << x + 1 << "-ая запись." << endl;
cout << "Имя: ";
cin >> A[x].name;
do
{
cout << "Пол (мальчик или девочка): ";
cin >> A[x].gender;
}while(A[x].gender != "мальчик"s && A[x].gender != "девочка"s);
do
{
cout << "Рост: ";
cin >> A[x].rost;
}while(A[x].rost <= 0.0);
}
cout << endl;
}

void print(anketa A[size])
{
cout << endl << '\t' << "Имя" << '\t' << "Пол" << '\t' << "Рост" << endl;
for(int x = 0; x < size; x++)
{
cout << x + 1 << "-ая запись." << endl << '\t';
cout << A[x].name << '\t' << A[x].gender << '\t'
<< A[x].rost << endl;
}
cout << endl;
}

bool moyen_rost(anketa A[size])
{
int count = 0;
float summa = 0.0;
for(int x = 0; x < size; x++)
{
if(A[x].gender == "девочка"s)
{
count++;
summa += A[x].rost;
}
}
if(!count) return false;
cout << "Средник рост девочек равен " << summa / count << '.' << endl;
return true;
}

void imja(anketa A[size])
{
int count = 0;
string imja_devochki;
cout << "Введите имя девочки: ";
cin >> imja_devochki;
for(int x = 0; x < size; x++)
{
if(imja_devochki == A[x].name)
{
cout << "\tЗапись " << x + 1 << ":\t";
cout << "рост -- " << A[x].rost << '.' << endl;
count++;
}
}
if(!count) cout << "Девочек с таким именем нет." << endl;
}

int main()
{
anketa A[size];
insert(A);
print(A);
if(!moyen_rost(A)) cout << "Девочек нет." << endl;
else imja(A);
return 0;
}
Azamjon Lutfullaev
Azamjon Lutfullaev
69 416
Владимир Зенкин Надо чтобы выглядело примерно так
Владимир Зенкин Препод сказал из прошлой практики посмотреть как надо сделать элементы массива
Владимир Зенкин И чтобы средний рост девочек был отдельной функцией