Задача по С++, список машин

Помогите с задачей плиз. Пользователь вводит данные пока не скажет хватит. Затем по выбору пользователя программа показывает данные выше или ниже указанного порога или данные по указанной модели (это вообще не понимаю как реализовать). Есть вот такой код, помогите поправить.

#include<stdlib.h>
#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
using namespace std;

struct Cars
{
    string brand;
    string model;
    int ID;
    float cost;
    string want;
};

Cars* Add(Cars* MyCar, int const count)
{
    if (count == 0)
    {
        MyCar = new Cars[1];
    }
    else
    {
        Cars* temp = new Cars[count + 1];
        for (int i = 0; i < count; i++)
        {
            temp[i] = MyCar[i];
        }
        delete[]MyCar;
        MyCar = temp;
    }
    return MyCar;
}

void SetData(Cars* MyCar, int const count)
{
    cout << "Enter brand\n"; getline(cin, MyCar[count].brand);
    cout << "Enter model\n"; getline(cin, MyCar[count].model);
    cout << "Enter price\n"; cin >> MyCar[count].cost;
    cout << "Enter ID\n"; cin >> MyCar[count].ID;
}

void ShowData(Cars* MyCar, int const count)
{
    int choice;
    int threshold;
    string want = "";
    cout << "Enter what you want to see\n";
    cout << "1 - Cars with prices greater than entered data\n";
    cout << "2 - Cars with prices less than entered data\n";
    cout << "3 - Cars of entered model\n";
    cout << "4 - Detail information\n";
    cin >> choice;

    switch (choice)
    {
    case 1:
        cout << "Enter threshold price\n";
        cin >> threshold;
        cout << setw(3) << "\t#\tBrand\tModel\tPrice\tID\n";
        for (int i = 0; i < count; i++)
        {
            if (MyCar[i].cost >= threshold)
            {
                cout << setw(3) << i + 1 << "\t" << MyCar[i].brand << "\t" << MyCar[i].model << "\t" << MyCar[i].cost << "\t" << MyCar[i].ID << "\n";
            }
            else
            {
                cout << "No data\n";
                return;
            }
        }
        break;
    case 2:
        cout << "Enter threshold price\n";
        cin >> threshold;
        cout << setw(3) << "\t#\tBrand\tModel\tPrice\tID\n";
        for (int i = 0; i < count; i++)
        {
            if (MyCar[i].cost <= threshold)
            {
                cout << setw(3) << i + 1 << "\t" << MyCar[i].brand << "\t" << MyCar[i].model << "\t" << MyCar[i].cost << "\t" << MyCar[i].ID << "\n";
            }
            else
            {
                cout << "No data\n";
                return;
            }

        }
        break;
    case 3:
        cout << "Enter the model you want see\n";
        getline(cin, want);
        cin.get();
        cout << setw(3) << "#\tBrand\tModel\tPrice\tID\n";
        for (int i = 0; i < count; i++)
        {
            if (MyCar[i].brand == MyCar[i].want)
            {
                cout << setw(3) << i + 1 << "\t" << MyCar[i].brand << "\t" << MyCar[i].model << "\t" << MyCar[i].cost << "\t" << MyCar[i].ID << "\n";
            }
            else
            {
                cout << "No data\n";
                return;
            }
        }
        break;
    case 4:
        cout << setw(3) << "#\tBrand\tModel\tPrice\tID\n";
        for (int i = 0; i < count; i++)
        {
            cout << setw(3) << i + 1 << "\t" << MyCar[i].brand << "\t" << MyCar[i].model << "\t" << MyCar[i].cost << "\t" << MyCar[i].ID << "\n";
        }
        break;
    default:
        cout << "Wrong choice\n";
        break;
    }

}
int main()
{
    Cars* MyCar = 0;
    int count = 0;
    bool YesOrNo = true;
    do
    {
        MyCar = Add(MyCar, count);
        SetData(MyCar, count);
        count++;

        cout << "Enter new data(1 - Yes, 0 - No)\n";
        cin >> YesOrNo;
        cin.get();
    } while (YesOrNo);
      
    ShowData(MyCar, count);
    delete[]MyCar;
    return 0;
}

Решил проблему таким образом

char want[50];
cout << "Enter the model you want see\n";
        cin >> want;
        cout << setw(3) << "#\tBrand\tModel\tPrice\tID\n";
        for (int i = 0; i < count; i++)
        {
            if (MyCar[i].brand == want)
            {
                cout << setw(3) << i + 1 << "\t" << MyCar[i].brand << "\t" << MyCar[i].model << "\t" << MyCar[i].cost << "\t" << MyCar[i].ID << "\n";
            }
            else
            {
                cout << "No data\n";
                return;
            }
        }

Так вроде работает

Плохое имя, эта структура же описывает одну машину. Лучше Car.

А тут соответственно наоборот: cars (это ж массив машин) + выкинуть my.

Лучше сделать функцию для вывода одной машины, а не копипастить это везде.

Print(cars[i]);

Для указателей лучше nullptr вместо 0.

Как сделать так, чтобы в этом коде “No data” выводилось только тогда, когда реально нет данных никаких? Не могу сообразить никак.
Вот такой код в итоге получился

#include <iostream>
#include <string>
#include <fstream>
#include <stdlib.h>
#include <iomanip>
using namespace std;
struct Car
{
    string brand;
    string model;
    int ID;
    float cost;
};


void ShowData1(Car* Cars, int const size)
{
    int threshold;
    cout << "Enter threshold price\n";
    cin >> threshold;
    cout << setw(3) << " #\tBrand\tModel\tPrice\tID\n";
    for (int i = 0; i < size; i++)
    {
        if (Cars[i].cost >= threshold)
        {
            cout << setw(3) << i + 1 << "\t" << Cars[i].brand << "\t" << Cars[i].model << "\t" << Cars[i].cost << "\t" << Cars[i].ID << "\n";
        }
    }
    cout << "\n\tNo more data\n";
}
void ShowData2(Car* Cars, int const size)
{
    int threshold;
    cout << "Enter threshold price\n";
    cin >> threshold;
    cout << setw(3) << " #\tBrand\tModel\tPrice\tID\n";
    for (int i = 0; i < size; i++)
    {
        if (Cars[i].cost <= threshold)
        {
            cout << setw(3) << i + 1 << "\t" << Cars[i].brand << "\t" << Cars[i].model << "\t" << Cars[i].cost << "\t" << Cars[i].ID << "\n";
        }
    }
    cout << "\n\tNo more data\n";
}
void ShowData3(Car* Cars, int const size)
{
    char want [50];
    cout << "Enter the model you want see\n";
    cin >> want;
    cout << setw(3) << " #\tBrand\tModel\tPrice\tID\n";
    for (int i = 0; i < size; i++)
    {
        if (Cars[i].brand == want)
        {
            cout << setw(3) << i + 1 << "\t" << Cars[i].brand << "\t" << Cars[i].model << "\t" << Cars[i].cost << "\t" << Cars[i].ID << "\n";
        }
    }
    
    cout << "\n\tNo more data\n";
}
void ShowData4(Car* Cars, int const size)
{
    cout << setw(3) << " #\tBrand\tModel\tPrice\tID\n";
    for (int i = 0; i < size; i++)
    {
        cout << setw(3) << i + 1 << "\t" << Cars[i].brand << "\t" << Cars[i].model << "\t" << Cars[i].cost << "\t" << Cars[i].ID << "\n";
    }

}
void SetData(Car* Cars, int size)
{
    for (int i = 0; i < size; i++)
    {
        cout << "Enter brand\n"; getline(cin, Cars[i].brand);
        cout << "Enter model\n"; getline(cin, Cars[i].model);
        cout << "Enter price\n"; cin >> Cars[i].cost;
        cout << "Enter ID\n"; cin >> Cars[i].ID;
        cin.get();
    }
}

int main()
{
    int size;
    cout << "How many cars do you want to enter\n";
    cin >> size;
    cin.get();
    Car* Cars = new Car[size];

    bool show = true;
    if (size <= 0)
    {
        cout << "Good bye!\n";
        show = false;
    }
    int choice;
    SetData(Cars, size);
    while (show)
    {
        cout << "\nEnter what you want to see\n";
        cout << "1 - Cars with prices greater than entered data\n";
        cout << "2 - Cars with prices less than entered data\n";
        cout << "3 - Cars of entered model\n";
        cout << "4 - Detail information\n";
        cout << "0 - Exit\n";
        cin >> choice;
        switch (choice)
        {
        case 1:
            ShowData1(Cars, size);
            break;
        case 2:
            ShowData2(Cars, size);
            break;
        case 3:
            ShowData3(Cars, size);
            break;
        case 4:
            ShowData4(Cars, size);
            break;
        case 0:
            show = false;
            break;
        default:
            cout << "Wrong choice\n";
            break;
        }
    }
    delete[]Cars;
    system("pause");
}

Например, проверять size?)

Ну я size же проверяю в мейне. Я имел ввиду если пользователь вводит цену, которая не попадает в диапазон данных, то получает “No data”. Ну или он ввел Тесла, а там есть только Тойота и Мазда, то тоже выводится “No data”?

А, ну в этом коде разве что добавить еще один счетчик, увеличивать когда условие подходит и проверять после цикла.

А вообще я бы отделил фильтрацию от вывода, сделав функции типа FilterByBrand(cars, brand), которые возвращают новый массив, а потом просто передавать его в функцию вывода.
Можно еще больше сократить дублирование кода сделав условие функцией как тут.