• 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

Cloud VPS
0 głosów
439 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,240 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 418 wizyt
pytanie zadane 5 czerwca 2023 w C i C++ przez p4wix Obywatel (1,040 p.)
0 głosów
1 odpowiedź 1,040 wizyt
0 głosów
0 odpowiedzi 188 wizyt
pytanie zadane 1 kwietnia 2022 w C i C++ przez piter11251 Obywatel (1,280 p.)

93,454 zapytań

142,449 odpowiedzi

322,718 komentarzy

62,833 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

Kursy INF.02 i INF.03
...