Не работает ввод массива структур

248
31 мая 2022, 13:20

Всем привет. Такая проблема: нет возможности заполнить массив структур - программа тут же заканчивается, предлагая закрыть окно. Подскажите, пожалуйста.

#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;

class CashMachine
{
private:
    struct product
    {
        int productCode;
        string productName;
        double price;
        int quantity;
    };
    string departmentName;
    double amountWithoutTax;
    double tax;
    double amountWithTax;
    int size;
    product** products;
public:
    CashMachine()
    {
        size = 5;
        products = new product * [size];
        departmentName = "Назва відділення";
    }
    void printDepartmentName()
    {
        cout << departmentName << endl;
    }
    void fillingTheCashMachine()
    {
        for (int i = 0; i < size; i++)
        {
            cout << "Заповнення інформації про товар " << i + 1 << endl;
            cout << "Укажіть код товару: ";
            cin >> products[i] -> productCode;
            cout << "Укажіть назву товару: ";
            cin >> products[i] -> productName;
            cout << "Укажіть ціну товару: ";
            cin >> products[i] -> price;
            cout << "Укажіть кількість цього виду товару: ";
            cin >> products[i] -> quantity;
        }
    }
    double findAmountWithoutTax()
    {
        for (int i = 0; i < size; i++)
        {
            amountWithoutTax = products[i] -> price * products[i] -> quantity;
        }
        return amountWithoutTax;
    }
    double findTax()
    {
        for (int i = 0; i < size; i++)
        {
            tax = amountWithoutTax * 0.18;
        }
        return tax;
    }
    double findAmountWithTax()
    {
        for (int i = 0; i < size; i++)
        {
            amountWithTax = amountWithoutTax + tax;
        }
        return amountWithTax;
    }


};
int main()
{
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
        CashMachine a;
        a.printDepartmentName();
        a.fillingTheCashMachine();
        
        return 0;
}
Answer 1

Падает, потому-что в products[i] - случайный указатель. Вы этим указателям не назначили ничего.

Тип массива нужно поменять из product** products; в product * products;. Выделяете память :

products = new product [size];

И обращения products[i]-> меняем на точку products[i]..

И деструктор не забываем написать. В нём delete[]products;.

READ ALSO
Как получить uncompressed byte array (DirectShow)?

Как получить uncompressed byte array (DirectShow)?

Я использую DirectShow https://docsmicrosoft

339
Как написать текст символами в консоль Visual Studio?

Как написать текст символами в консоль Visual Studio?

Язык программирования с++Нужно вставить надпись

356
Ошибка [ilink64 Error] Error: Unresolved external в C++ Builder 10.3

Ошибка [ilink64 Error] Error: Unresolved external в C++ Builder 10.3

Начал изучать C++ Builder 103 и сразу столкнулся с непонятной ошибкой

230
C++ парсинг строки на числа

C++ парсинг строки на числа

Друзья! Подскажите, пожалуйста, наиболее элегантный способ следзадачи:

202