Tablica dynamiczna posiadająca struktury

0

Hej. Mój problem polega na tym, że program się wysypuje po dodaniu pierwszego elementu tablicy, jakim jest struktura.
Prosiłabym o ścisłe wskazanie błędu/poprawienie kodu tak, aby zachowana była jego forma- prowadzący lubi mieć wszystko po "jego myśli", a w taki sposób nas uczył.

#include <iostream>
#include <string>

using namespace std;

struct Samochod{
string marka;
string model;
int rokProdukcji;
int moc;

void drukuj()
{
        cout << "Wpisz dane samochodu... " << endl;
        cout << "Marka: ";
        cin >> marka;
        cout << endl;
        cout << "Model: ";
        cin >> model;
        cout << endl;
        cout << "Rok produkcji: ";
        cin >> rokProdukcji;
        cout << endl;
        cout << "Moc: ";
        cin >> moc;
        cout << endl;
}

};


int main()
{
    int rozmiar=0;
    Samochod *s= new Samochod[rozmiar];
    string odp="T";
    while(odp=="T")
    {
        Samochod s[rozmiar];
        s[rozmiar].drukuj();
        cout << "Wpisac dane nowego samochodu? (T/N)" << endl;
        cin >> odp;
        rozmiar++;
    }

    delete [] s;
    return 0;
}
4

To kurs antyzasad programowania? :<
Prowadzącemu można podesłać (Tobie też polecam lekturę): https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete/

ad. meritum:

    int rozmiar=0;
    Samochod *s= new Samochod[rozmiar];

Alokujesz tablicę 0 elementów. Ile w tym sensu - oceń sam ;​)

        Samochod s[rozmiar];
        s[rozmiar].drukuj();

To jest deklaracja nowej tablicy 0 elementów. (pomijam już, że to VLA, a więc niepoprawny kod w C++) Ponadto w drugiej linii wybierasz pierwszy element poza tablicą i wywołujesz jego metodę drukuj.

Co więcej, metoda drukuj wczytuje dane, zamiast drukować, wtf.

Cały ten kod nadaje się do zaorania, niestety. Pokaż jakie masz zadanie, bo w obecnym formacie to nie ma żadnego sensu.

0
kq napisał(a):

To kurs antyzasad programowania? :<
Prowadzącemu można podesłać (Tobie też polecam lekturę): https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete/

ad. meritum:

    int rozmiar=0;
    Samochod *s= new Samochod[rozmiar];

Alokujesz tablicę 0 elementów. Ile w tym sensu - oceń sam ;​)

        Samochod s[rozmiar];
        s[rozmiar].drukuj();

To jest deklaracja nowej tablicy 0 elementów. (pomijam już, że to VLA, a więc niepoprawny kod w C++) Ponadto w drugiej linii wybierasz pierwszy element poza tablicą i wywołujesz jego metodę drukuj.

Co więcej, metoda drukuj wczytuje dane, zamiast drukować, wtf.

Cały ten kod nadaje się do zaorania, niestety. Pokaż jakie masz zadanie, bo w obecnym formacie to nie ma żadnego sensu.

Słuchaj, tak się składa, że jestem dzień, a właściwie już pare godzin przed kolokwium i nie uśmiecha mi się uczyć wszystkiego od początku ;) Więc jakieś vector-y odpadają i tyle. Chciałabym poznać rozwiązanie tymże sposobem- jeśli nie potrafisz doradzić- trudno, poczekam, wierząc w moc tego forum.

1

Wiem, jak to jest przed kolokwium/oddaniem projektu. No ale jednak…

@kq oraz @enedil dobrze radzą (to nie jest oczywiste, tylko ja już to wiem). Ja bym też był za zamieszczeniem polecenia do zadania. Na podstawie tego kodu trudno nawet oszacować, co dokładnie program ma robić. Czy wyświetlać, czy pobierać dane samochodu?

Poza tym nie napisałaś, czym dokładnie jest "forma", która ma zostać zachowana. Całkiem normalne, że chcesz dostosować się do pewnych zasad co do oddawania projektu – ale jeśli mamy pomóc, my też musimy je znać.

Ja nawet spróbowałbym coś pokombinować intuicyjnie (na przekór zaoraniu kodu, które postuluje @kq), no ale… nie znam się na C++ (możliwe więc, że po moich zmianach program byłby jeszcze bardziej niepoprawny).

Jeżeli będziesz chcieć jeszcze w następnych dniach pomocy przy tym programie (bo może to już ostateczny termin na naukę/oddanie), to napisz przynajmniej, proszę, treść zadania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1