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

Język Programowania C++ Stephen Prata ćwiczenie 7 rozdział 5

VPS Starter Arubacloud
0 głosów
390 wizyt
pytanie zadane 27 czerwca 2018 w C i C++ przez Kasjan Nowicjusz (240 p.)

Program powinien wczytywać markę i rok produkcji określonej liczby samochodów i zapisywać je w dynamicznej tablicy struktur car, aby na koniec wyświetlić wczytane dane. Niestety poprawnie wyświetla jedynie ostatni zestaw danych (informacje o ostatnim samochodzie).

#include <iostream>
struct car{
    std::string marka;
    int rok;
};
int main()
{
    std::cout<<"Ile samochodow chcesz skatalogowac?";
    int n;
    std::cin>>n;
    for(int i = 0; i < n; i++)
    {
        car * ps = new car[n];
        std::cout<<"Samochod nr #"<<(i+1)<<std::endl;
        std::cout<<"Podaj marke samochodu: ";
        std::cin>>(*(ps+i)).marka;
        std::cout<<"Podaj rok produkcji: ";
        std::cin>>(*(ps+i)).rok;
        while(i == (n-1))
        {
            for(int j = 0; j < n; j++)
            {
                std::cout<<(*(ps+j)).marka<<" ";
                std::cout<<(*(ps+j)).rok<<"\n";
            }
        delete ps;
        break;
        }
    }
    return 0;
}

 

komentarz 5 grudnia 2019 przez Ganci Użytkownik (670 p.)
A gdybym w string'u chciał przechować 2-członową nazwę, w jaki sposób miałbym to zrobić?

2 odpowiedzi

+2 głosów
odpowiedź 27 czerwca 2018 przez k222 Nałogowiec (30,150 p.)
wybrane 27 czerwca 2018 przez Kasjan
 
Najlepsza
car * ps = new car[n];

powinno być przed pętlą for, bo w tej chwili za każdym razem tworzysz nową tablicę

while(i == (n-1))
        {
            for(int j = 0; j < n; j++)
            {
                std::cout<<(*(ps+j)).marka<<" ";
                std::cout<<(*(ps+j)).rok<<"\n";
            }
        delete ps;

takie coś powinno być po pętli for, bo sprawdzanie za każdym razem warunku skończenia pętli skoro wystarczy poczekać aż się ta pętla skończy jest bez sensu 

i powinno być:

delete [] ps;

bo usuwasz tablicę

+1 głos
odpowiedź 27 czerwca 2018 przez Franc Gorzki Użytkownik (780 p.)
#include <iostream>
struct car{
    std::string marka;
    int rok;
};
int main()
{
    std::cout<<"Ile samochodow chcesz skatalogowac?";
    int n;
    std::cin>>n;
    
    car * ps = new car[n];
    
    for(int i = 0; i < n; i++)
    {
        std::cout<<"Samochod nr #"<<(i+1)<<std::endl;
        std::cout<<"Podaj marke samochodu: ";
        std::cin>>(*(ps+i)).marka;
        std::cout<<"Podaj rok produkcji: ";
        std::cin>>(*(ps+i)).rok;
        //while(i == (n-1))
        //{
    }
    
    for(int j = 0; j < n; j++)
            {
                std::cout<<(*(ps+j)).marka<<" ";
                std::cout<<(*(ps+j)).rok<<"\n";
            }
        delete [] ps;
        
        //}
    
    return 0;
}

Przeanalizuj sobie co robiłeś źle, ten kod który wkleiłem działa. Niepotrzebny był while, a drugi for źle umieszczony. 

Podobne pytania

0 głosów
4 odpowiedzi 1,024 wizyt
0 głosów
1 odpowiedź 528 wizyt
pytanie zadane 9 września 2017 w C i C++ przez Modferno Początkujący (400 p.)
0 głosów
2 odpowiedzi 343 wizyt

93,004 zapytań

141,969 odpowiedzi

321,248 komentarzy

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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...