1 Востаннє редагувалося koala (10.06.2022 15:15:06)

Тема: Порівняння із вказівником на масив

Не можу порівняти із tmp та вивести. Що не так із кодом?

Завдання:
Описати структуру з іменем SKLAD. яка містить поля: NAME - назва товару; TYPE - одиниця виміру; COST - ціна одиниці товару; QUANTITY - кількість. Написати програму, що окремими функціями виконує дії:
-    введення з клавіатури даних в масив SHOP, що складається з N змінних типу SKLAD;
-    виведення на екран інформації про товар, його кількість, ціну одиниці та обчислену загальну суму на складі, назва якого вводиться з клавіатури; якщо такого немає, то вивести відповідне повідомлення.

#include <iostream>
#include <string>
using namespace std;

struct Sklad {
        string name;
        string type;
        double cost;
        double quantity;
        double sums(double a, double b) 
        {
            double sum = a*b;
            return sum;
        }
        void Print()
        {
            cout<<"Назва товару"<<name<<endl;
            cout<<"Одиниця виміру"<<type<<endl;
            cout<<"Ціна одиниці товару"<<cost<<endl;
            cout<<"Кількість товару"<<quantity<<endl;
            cout<<"Загальна вартість товару "<<name<<" на складі складає "<<sums(cost, quantity)<<endl;
        }
};
int main()
{
    setlocale(0, ".1251");
    cout<<"\nКількість товарів:"<<endl;
    int n;
    cin>>n;
    Sklad *tovary = new Sklad[n];

    for (int j=0; j!=n; j++) {
        cout<<"\nНазва товару:"<<endl;
        cin>>tovary[j].name;
        cout<<"Одиниця виміру:"<<endl;
        cin>>tovary[j].type;
        cout<<"Ціна одиниці товару:"<<endl;
        cin>>tovary[j].cost;
        cout<<"Кількість товару:"<<endl;
        cin>>tovary[j].quantity;
    }
    cout<<endl;
    string tmp;
    cout<< tmp<<endl;
    
    cout<<"\nВедіть назву товару, який ви шукаєте:"<<endl;
    с
    getline(cin, tmp);
    
    for (int j=0; j!=n; j++)
        if (tovary[j].name == tmp) {
           tovary[j].Print();
        } 
        else {
            cout<<"\nТакого товару на складі немає."<<endl;}
    delete[]tovary;
    return 0;
}

2

Re: Порівняння із вказівником на масив

У рядку
cout<<"\nВедіть назву товару, який ви шукаєте:"<<endl;
зайва літра c, але це випадково. Питання залишаєтся.

3

Re: Порівняння із вказівником на масив

Якби ви виводили tmp, то помітили б проблему. cin::operator>> читає до розділювача (пробілу чи символу нового рядка); getline читає до кінця рядка. Проблема в тому, що після введення товарів у буфері лишається той самий символ нового рядка, і getline читає 0 символів. Прочистьте буфер (просто прочитайте один символ, або getline в той же tmp), а потім уже читайте справжні дані.

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

4

Re: Порівняння із вказівником на масив

І я вам додав теги code (кнопка <>), наступного разу самостійно.

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

5

Re: Порівняння із вказівником на масив

Я вже нічого не розумію після 10 лаби за 2 дня. Як мені очистити буфер? Напишить, будь-ласка...

6

Re: Порівняння із вказівником на масив

Якщо додаю ще один рядок
<>
cout<<"\nВедіть назву товару, який ви шукаєте:"<<endl;
    getline(cin, tmp);
    getline(cin, tmp);
    cout<<tmp<<endl;
<>
То програма чекає і доводиться ще раз вводити назву товару.

7

Re: Порівняння із вказівником на масив

getline(cin, tmp); //скидаємо сміття
getline(cin, tmp); //а тепер читаємо

Ну або ж просто читайте tmp так само, як і name:

cin>>tmp;
Подякували: reladon1

8 Востаннє редагувалося koala (10.06.2022 17:10:14)

Re: Порівняння із вказівником на масив

reladon написав:

Якщо додаю ще один рядок

cout<<"\nВедіть назву товару, який ви шукаєте:"<<endl;
    getline(cin, tmp);
    getline(cin, tmp);
    cout<<tmp<<endl;

То програма чекає і доводиться ще раз вводити назву товару.

А це вже цікаво. Можете

cout<<tmp<<" l="<<tmp.length()<<"\n";

Після введення додати?

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

9

Re: Порівняння із вказівником на масив

Дякую, допомогло. Просто через cin.

10

Re: Порівняння із вказівником на масив

Кому цікаво:

string tmp;
getline(cin, tmp);
cout<<"\nВедіть назву товару, який ви шукаєте:"<<endl;
cin>>tmp;
Подякували: koala1