#include <iostream>
#include <vector>
#include <string>
#include <cctype>  // для использования функции toupper()

using namespace std;

struct Product {
    char type; // 'S' для смартфона, 'L' для ноутбука

    // Общие поля для всех типов продуктов
    string name;
    double price;

    // Поля, специфичные для вариантов
    union {
        // Вариант 1: Смартфон
        struct {
            int camera_count; // количество камер
            double battery_capacity; // емкость батареи
        } smartphone;

        // Вариант 2: Ноутбук
        struct {
            double screen_size; // размер экрана
            int ram_size; // объем оперативной памяти
        } laptop;
    } details;
};

// Функция для добавления нового продукта
void addProduct(vector<Product> &products) {
    Product product;

    do {
        cout << "Enter product type (S - smartphone, L - laptop): ";
        cin >> product.type;

        // Приводим букву к верхнему регистру
        product.type = toupper(product.type);

        if (product.type != 'S' && product.type != 'L') {
            cout << "Invalid product type! Please enter 'S' for smartphone or 'L' for laptop." << endl;
        }
    } while (product.type != 'S' && product.type != 'L');

    // Запрашиваем название продукта
    cout << "Enter product name: ";
    cin.ignore(); // Очищаем буфер ввода после cin
    getline(cin, product.name); // Получаем строку с именем

    do {
        cout << "Enter product price: ";
        cin >> product.price;
        if (product.price <= 0) {
            cout << "Price must be greater than 0. Please enter again." << endl;
        }
    } while (product.price <= 0);

    // Если это смартфон, запрашиваем специфичные поля для смартфона
    if (product.type == 'S') {
        do {
            cout << "Enter the number of cameras: ";
            cin >> product.details.smartphone.camera_count;
            if (product.details.smartphone.camera_count <= 0) {
                cout << "The number of cameras must be greater than 0. Please enter again." << endl;
            }
        } while (product.details.smartphone.camera_count <= 0);

        do {
            cout << "Enter battery capacity (in mAh): ";
            cin >> product.details.smartphone.battery_capacity;
            if (product.details.smartphone.battery_capacity <= 0) {
                cout << "Battery capacity must be greater than 0. Please enter again." << endl;
            }
        } while (product.details.smartphone.battery_capacity <= 0);

        // Если это ноутбук, запрашиваем специфичные поля для ноутбука
    } else if (product.type == 'L') {
        do {
            cout << "Enter screen size (in inches): ";
            cin >> product.details.laptop.screen_size;
            if (product.details.laptop.screen_size <= 0) {
                cout << "Screen size must be greater than 0. Please enter again." << endl;
            }
        } while (product.details.laptop.screen_size <= 0);

        do {
            cout << "Enter RAM size (in GB): ";
            cin >> product.details.laptop.ram_size;
            if (product.details.laptop.ram_size <= 0) {
                cout << "RAM size must be greater than 0. Please enter again." << endl;
            }
        } while (product.details.laptop.ram_size <= 0);
    }

    // Добавляем продукт в вектор
    products.push_back(product);
    cout << "Product added successfully!" << endl;
}

// Функция для удаления продукта (индексация начинается с 1)
void removeProduct(vector<Product> &products) {
    if (products.empty()) {
        cout << "No products to remove." << endl;
        return;
    }

    int index;
    cout << "Enter the product number to remove (starting from 1): ";
    cin >> index; // Запрашиваем номер продукта

    // Проверяем корректность введенного индекса
    if (index > 0 && index <= products.size()) {
        products.erase(products.begin() + (index - 1)); // Удаляем продукт
        cout << "Product removed!" << endl;
    } else {
        cout << "Invalid product number!" << endl; // Ошибка, если индекс некорректен
    }
}

// Функция для вывода всех продуктов
void displayProducts(const vector<Product> &products) {
    if (products.empty()) {
        // Если нет продуктов, выводим сообщение
        cout << "No products available." << endl;
        return;
    }

    for (int i = 0; i < products.size(); ++i) {
        cout << "Product #" << i + 1 << endl; // Выводим номер продукта начиная с 1
        cout << "Name: " << products[i].name << endl;
        cout << "Price: " << products[i].price << " USD" << endl;

        // Если продукт - смартфон, выводим информацию для смартфона
        if (products[i].type == 'S') {
            cout << "Type: Smartphone" << endl;
            cout << "Number of cameras: " << products[i].details.smartphone.camera_count << endl;
            cout << "Battery capacity: " << products[i].details.smartphone.battery_capacity << " mAh" << endl;
            // Если продукт - ноутбук, выводим информацию для ноутбука
        } else if (products[i].type == 'L') {
            cout << "Type: Laptop" << endl;
            cout << "Screen size: " << products[i].details.laptop.screen_size << " inches" << endl;
            cout << "RAM size: " << products[i].details.laptop.ram_size << " GB" << endl;
        }
        cout << "--------------------" << endl; // Разделитель между продуктами
    }
}

// Функция для вывода только смартфонов
void displaySmartphones(const vector<Product> &products) {
    bool found = false; // Переменная для проверки наличия смартфонов

    for (int i = 0; i < products.size(); ++i) {
        if (products[i].type == 'S') {
            // Проверяем, является ли продукт смартфоном
            found = true; // Нашли хотя бы один смартфон
            cout << "Smartphone #" << i + 1 << endl;
            cout << "Name: " << products[i].name << endl;
            cout << "Price: " << products[i].price << " USD" << endl;
            cout << "Number of cameras: " << products[i].details.smartphone.camera_count << endl;
            cout << "Battery capacity: " << products[i].details.smartphone.battery_capacity << " mAh" << endl;
            cout << "--------------------" << endl;
        }
    }

    if (!found) {
        // Если смартфоны не найдены
        cout << "No smartphones available." << endl;
    }
}

// Функция для вывода только ноутбуков
void displayLaptops(const vector<Product> &products) {
    bool found = false; // Переменная для проверки наличия ноутбуков

    for (int i = 0; i < products.size(); ++i) {
        if (products[i].type == 'L') {
            // Проверяем, является ли продукт ноутбуком
            found = true; // Нашли хотя бы один ноутбук
            cout << "Laptop #" << i + 1 << endl;
            cout << "Name: " << products[i].name << endl;
            cout << "Price: " << products[i].price << " USD" << endl;
            cout << "Screen size: " << products[i].details.laptop.screen_size << " inches" << endl;
            cout << "RAM size: " << products[i].details.laptop.ram_size << " GB" << endl;
            cout << "--------------------" << endl;
        }
    }

    if (!found) {
        // Если ноутбуки не найдены
        cout << "No laptops available." << endl;
    }
}

// Основное меню программы
void menu() {
    vector<Product> products;
    int choice;

    // Бесконечный цикл для работы меню
    do {
        // Выводим список опций
        cout << "1. Add new product" << endl;
        cout << "2. Remove a product" << endl;
        cout << "3. Display all products" << endl;
        cout << "4. Display all smartphones" << endl;
        cout << "5. Display all laptops" << endl;
        cout << "0. Exit" << endl;
        cout << "Choose an option: ";
        cin >> choice;

        // Обрабатываем выбор пользователя
        switch (choice) {
            case 1:
                addProduct(products); // Добавить продукт
                break;
            case 2:
                removeProduct(products); // Удалить продукт
                break;
            case 3:
                displayProducts(products); // Показать все продукты
                break;
            case 4:
                displaySmartphones(products); // Показать только смартфоны
                break;
            case 5:
                displayLaptops(products); // Показать только ноутбуки
                break;
            case 0:
                cout << "Exiting..." << endl; // Выход из программы
                break;
            default:
                cout << "Invalid option!" << endl; // Ошибка при неверной опции
                break;
        }
    } while (choice != 0);
}

int main() {
    menu(); // Запуск меню
    return 0;
}
перепиши, используя стандартный язык си, без каких-либо функций си++