• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyświetlanie zawartości wskaźników

Object Storage Arubacloud
0 głosów
315 wizyt
pytanie zadane 14 kwietnia 2022 w C i C++ przez Kuba Kaleta Nowicjusz (230 p.)

Witam napisałem program, proszący o podanie ilosci samochodów, nastepnie ich marke, oraz rok produkcji, wszystko zostało zapisane we wskaźniku, lecz nie moge poradzić sobie z wyświetleniem zapisanych wartości, wyskakuje błąd przy ostatniej linijce kodu

no match for 'operator<<' (operand types are 'std::ostream' 

#include <iostream>
#include <cstring>

using namespace std;

struct car

{
    string marka;
    int rok_produkcji;
};

int main()
{

        cout << "Ile samochodow chcesz skatalogowac? " << endl;
        int samochody;
        cin >> samochody;
        int licznik = 1;
        car *psome = new car[samochody];

        for(int i=0; i<samochody; i++)

        {
            for(psome[0]; licznik<=samochody; psome++)
            {
                licznik++;
                cout << "Prosze podac marke: " << endl;
                cin >> psome[0].marka;
                cout << "Rok produkcji: " << endl;
                cin >> psome[0].rok_produkcji;

            };
            for(int j=0; j<samochody; j++)
            {
                cout << psome[j] << endl;

            }



        } 







    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 14 kwietnia 2022 przez Eryk Andrzejewski Mędrzec (164,260 p.)
wybrane 31 lipca 2022 przez Kuba Kaleta
 
Najlepsza

Problem polega na tym, że std::cout nie wie jak wyświetlić obiekt typu car - gdyż zwyczajnie tego typu nie zna. Problem można rozwiązać np. przeciążając operator <<, ale na ten moment najprostsze będzie wypisanie ręcznie wartości pól, wchodzących w skład struktury. Czyli zamiast

cout << psome[j] << endl;

piszesz

cout << psome[j].marka << " " << psome[j].rok_produkcji << endl;

Marka i rok_produkcji są, odpowiednio, typu: std::string oraz int, a te typy danych są wbudowane w język, więc std::cout wie jak je wyświetlić smiley

komentarz 15 kwietnia 2022 przez Kuba Kaleta Nowicjusz (230 p.)

Dzięki za odpowiedż, poniekąd pomogło mi to, ale nie w pełni, gdyż teraz program sie w koncu odpala, jednak po zakonczeniu wyswietla tylko ostatnią wpisaną marke oraz rok i jakies cyfry, wyglada to teraz tak 

#include <iostream>
#include <cstring>

using namespace std;

struct car

{
    string marka;
    int rok_produkcji;
};

int main()
{

        cout << "Ile samochodow chcesz skatalogowac? " << endl;
        int samochody;
        cin >> samochody;
        int licznik = 1;
        car *psome = new car[samochody];

        for(int i=0; i<samochody; i++)

        {
            for(int g = 0; licznik<=samochody; g++)
            {
                licznik++;
                cout << "Prosze podac marke: " << endl;
                cin >> psome[0].marka;
                cout << "Rok produkcji: " << endl;
                cin >> psome[0].rok_produkcji;
            }
        };
        for(int j=0; j<=licznik; j++)
            {

                cout << psome[j].marka << endl;
                cout << psome[j].rok_produkcji << endl;

            }





    return 0;
}

 

komentarz 24 kwietnia 2022 przez Jacek0325 Obywatel (1,040 p.)

Cześć. Mam parę wskazówek do twojego kodu, dzięki którym program powinien zacząć wyświetlać wartości, które wcześniej użytkownik wpisuje.

Zwróć uwagę, że w twoim kodzie między liniami 22 a 33 zastosowałeś jedną pętlę for w drugiej, co jest tutaj niepotrzebne - wystarczy jedna pętla, która ma się powtórzyć tyle razy, ile użytkownik wcześniej zapisał do zmiennej samochody. Nagłówek pętli w linii 22 jest więc ok - on właśnie sprawi, że dalszy fragment powtórzy się dla i równego od 0 do samochody-1. Niepotrzebna jest natomiast linia 25 - proponuję ją usunąć, a również usunąć nawiasy w liniach 26 i 32. Po nawiasie kończącym w linii 33 niepotrzebny jest średnik. W ten sposób dostajemy pierwszą pętlę, która pobiera dane (marka i rok produkcji), ale zajrzyjmy jeszcze do jej środka.

Tak naprawdę zmienna licznik i operacje na niej też nie są potrzebne do tego zadania. Wystarczy, że program zapyta o markę i rok produkcji (tak, jak to napisałeś od linii 28), ale zapisze to do odpowiednich szufladek tablicy psome - czyli tam, gdzie jest psome[0], powinno być psome[i].

Nagłówek drugiej pętli (linia 34) powinien być analogiczny do tego w linii 22 - wypisywanie wartości również powtórzy się dla wszystkich samochodów.

Pozdrawiam.

1
komentarz 31 lipca 2022 przez Kuba Kaleta Nowicjusz (230 p.)

Dziekuje Panie Jacku, dzieki Pana pomocy kod działa teraz w 100% tak jak powinien, wyglada nastepujaco: 

 

#include <iostream>
#include <cstring>

using namespace std;

struct car

{
    string marka;
    int rok_produkcji;
};

int main()
{

        cout << "Ile samochodow chcesz skatalogowac? " << endl;
        int samochody;
        cin >> samochody;
        car *psome = new car[samochody];

        for(int i=0; i<samochody; i++)

        {
                cout << "Prosze podac marke: " << endl;
                cin >> psome[i].marka;
                cout << "Rok produkcji: " << endl;
                cin >> psome[i].rok_produkcji;

        }
        for(int g = 0; g<=samochody; g++)
            {

                cout << psome[g].marka << endl;
                cout << psome[g].rok_produkcji << endl;

            }
    return 0;
}

 

Podobne pytania

0 głosów
2 odpowiedzi 165 wizyt
pytanie zadane 5 czerwca 2023 w C i C++ przez p4wix Obywatel (1,040 p.)
0 głosów
1 odpowiedź 525 wizyt
0 głosów
0 odpowiedzi 121 wizyt
pytanie zadane 1 kwietnia 2022 w C i C++ przez piter11251 Obywatel (1,280 p.)

92,555 zapytań

141,403 odpowiedzi

319,560 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...