1

Тема: Не виводить всі данні в таблицю, а тількі останні

Не виводить всю введенну інформацію в таблицю, а тількі останні введені данні.

#include <iostream>
#include <string>
#include <Windows.h>
#include <iomanip>

using namespace std;

struct Stationery {
    string name_type;
    char item_type;
    short int min_amount;
    double price;
}stationery;

int main() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);

    int cntr;

    cout << "Данні: " << endl;
    for (cntr = 0; cntr < 9; cntr++) {
        cout << cntr + 1 << ". Найменування товару: ";
        cin >> stationery.name_type;

        if (stationery.name_type == "Кінець") {
            break;
        }

        cout << "\t" << "Тип товару: ";
        cin >> stationery.item_type;

        cout << "\t" << "Ціна за 1 шт.(грн.): ";
        cin >> stationery.price;

        cout << "\t" << "Мінімальна кількість у партії: ";
        cin >> stationery.min_amount;

        cout << endl;
    }

    cout << endl << endl << endl << endl << endl;
    cout << "-------------------------------------------------------------------------------------------" << endl;
    cout << "|                                          Прайс-лист                                     |" << endl;
    cout << "-------------------------------------------------------------------------------------------" << endl;
    cout << "| Найменування товару | Тип товару | Цiна за 1 шт. (грн.) | Мiнiмальна кiлькiсть у партiї |" << endl;
    cout << "-------------------------------------------------------------------------------------------" << endl;
    for (int cout_cntr = 0; cout_cntr < cntr; cout_cntr++) {
        cout << "|" << setw(14) << stationery.name_type << setw(8) << "|" << setw(6) << stationery.item_type << setw(7) << "|"
            << setw(13) << stationery.price << setw(10) << "|" << setw(17) << stationery.min_amount << setw(15) << "|"
            << endl;
        cout << "-------------------------------------------------------------------------------------------" << endl;
    }
    return 0;
}
Post's attachments

Безімені.png 13.22 kb, 161 downloads since 2017-11-14 

2

Re: Не виводить всі данні в таблицю, а тількі останні

Як думаєте, яке значення cntr в рядку 48?

3

Re: Не виводить всі данні в таблицю, а тількі останні

Проблема в тому, що ви не виділяєте пам'ять під ті 10 елементів, які вводите, а з кожним проходом циклу перезаписуєте попереднє значення.
Найпростіше оголосити змінні як статичні масиви (але краще виділяти пам'ять динамічно, щоби можна було додавати довільну кількість елементів).

#include <iostream>
#include <string>
#include <Windows.h>
#include <iomanip>

using namespace std;

struct Stationery {
    string name_type[10];
    char item_type[10][10];
    short int min_amount[10];
    double price[10];
}stationery;

int main() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);

    int cntr;

    cout << "Данні: " << endl;
    for (cntr = 0; cntr < 9; cntr++) {
        cout << cntr + 1 << ". Найменування товару: ";
        cin >> stationery.name_type[cntr];

        if (stationery.name_type[cntr] == "Кінець") {
            break;
        }

        cout << "\t" << "Тип товару: ";
        cin >> stationery.item_type[cntr];

        cout << "\t" << "Ціна за 1 шт.(грн.): ";
        cin >> stationery.price[cntr];

        cout << "\t" << "Мінімальна кількість у партії: ";
        cin >> stationery.min_amount[cntr];

        cout << endl;
    }

    cout << endl << endl << endl << endl << endl;
    cout << "-------------------------------------------------------------------------------------------" << endl;
    cout << "|                                          Прайс-лист                                     |" << endl;
    cout << "-------------------------------------------------------------------------------------------" << endl;
    cout << "| Найменування товару | Тип товару | Цiна за 1 шт. (грн.) | Мiнiмальна кiлькiсть у партiї |" << endl;
    cout << "-------------------------------------------------------------------------------------------" << endl;
    for (int cout_cntr = 0; cout_cntr < cntr; cout_cntr++) {
        cout << "|" << setw(14) << stationery.name_type[cout_cntr] << setw(8) << "|" << setw(6) << stationery.item_type[cout_cntr] << setw(7) << "|"
            << setw(13) << stationery.price[cout_cntr] << setw(10) << "|" << setw(17) << stationery.min_amount[cout_cntr] << setw(15) << "|"
            << endl;
        cout << "-------------------------------------------------------------------------------------------" << endl;
    }
    return 0;
}

http://picua.org/img/2017-11/14/oxenvk81nkfpk9fu0l0dng1qf.png

Подякували: blizzard1

4

Re: Не виводить всі данні в таблицю, а тількі останні

Це геніально.
Структури спеціально придумали, щоб не треба було споріднені дані по різних сховищах розкладати - але, звісно, і тут придумають, як так зробити, щоб вийшла кака.
Ви ж на плюсах пишете - то і робіть, як на плюсах прийнято.

//Структура даних
struct Stationery {
    string name_type;
    string item_type;
    short int min_amount;
    double price;
};

int main() {
    //Масив структур
    Stationery stationery[10];
    ...
        cin >> stationery[cntr].name_type;
        ...

Крім того, у вас змінні типу string/char[] будуть без пробілів, бо operator>> читає тільки до пробілу. Щоб читати рядок до кінця, вам потрібен getline - але тоді доведеться додатково чистити буфер.

Подякували: Betterthanyou, leofun012