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

C++ program ze strukturą, pętlą for i tablicą

VPS Starter Arubacloud
0 głosów
2,199 wizyt
pytanie zadane 22 czerwca 2017 w C i C++ przez wojo44 Nowicjusz (160 p.)

Cześć.

Napisałem program mający na celu stworzenie spisu 10 książek. Wpisuje po kolei dane każdej książki a na koniec program ma mi wyświetlić na ekranie informacje na temat każdej z nich z tablicy biblioteka[]. I pojawia się taki problem: kompilator nie widzi żadnego błędu, program się uruchamia, i po wpisaniu tytułu drugiej książki wyskakuje okienko z komunikatem od Windows "Program przestał działać" itd. i wszystko się wysypuje.

Powie mi ktoś o co chodzi i dlaczego kompilator nie zauważa błędu? Korzystam z nowej wersji Code::Blocks

#include<iostream>
#include<string>

using namespace std;

struct Ksiazka
{
    string tytul;
    string autor;
    int ISBN;
    int liczba_egzemplarzy;
};

int main()
{
    Ksiazka ksiazka0, ksiazka1, ksiazka2, ksiazka3, ksiazka4, ksiazka5, ksiazka6, ksiazka7, ksiazka8, ksiazka9;

    Ksiazka biblioteka[10] = {ksiazka0, ksiazka1, ksiazka2, ksiazka3, ksiazka4, ksiazka5, ksiazka6, ksiazka7, ksiazka8, ksiazka9};

    int a = 0;

    for(Ksiazka biblioteka[a]; a<=9; a++)
    {
    cout << "Podaj tytul ksiazki nr " << a << ": ";
    cin >> biblioteka[a].tytul;
    cout << endl << "Podaj autora ksiazki nr " << a << ": ";
    cin >> biblioteka[a].autor;
    cout << endl << "Podaj nr ISBN ksiazki nr " << a << ": ";
    cin >> biblioteka[a].ISBN;
    cout << endl << "Podaj liczbe egzemplarzy ksiazki nr " << a << ": ";
    cin >> biblioteka[a].liczba_egzemplarzy;
    cout << "\n\n\n";
    }

    for(Ksiazka biblioteka[a]; a<=9; a++)
    {
    cout << biblioteka[a].tytul << endl << biblioteka[a].autor << endl << biblioteka[a].ISBN << endl << biblioteka[a].liczba_egzemplarzy << endl;
    }

    cin.get();
    cin.get();
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 22 czerwca 2017 przez niezalogowany

Deklarować nową tablicę o rozmiarze 0 (a=0).
Zamień:

for(Ksiazka biblioteka[a]; a<=9; a++)

Na:

for(int a = 0; a<=9; a++)

 

BTW: Nie rozumiem do czego jest Ci potrzebny taki zapis:

Ksiazka ksiazka0, ksiazka1, ksiazka2, ksiazka3, ksiazka4, ksiazka5, ksiazka6, ksiazka7, ksiazka8, ksiazka9;
Ksiazka biblioteka[10] = {ksiazka0, ksiazka1, ksiazka2, ksiazka3, ksiazka4, ksiazka5, ksiazka6, ksiazka7, ksiazka8, ksiazka9};

Ładniej i wygodniej możesz zrobić tak:

Ksiazka biblioteka[10];

 

komentarz 22 czerwca 2017 przez wojo44 Nowicjusz (160 p.)

Dzięki, jakoś dałem radę, zmieniłem trochę kod i teraz mam inny problem

#include<iostream>
#include<string>

using namespace std;

struct Ksiazka
{
    string tytul;
    string autor;
    int ISBN;
    int liczba_egzemplarzy;
};

int a = 0;
Ksiazka biblioteka[10];

Ksiazka wypis(int a)
{
    for(a=0; a<=9; a++)
    {
    cout << "tytul: " << biblioteka[a].tytul << ", autor: " << biblioteka[a].autor << ", nr ISBN: " << biblioteka[a].ISBN << ", Liczba egzemplarzy: " << biblioteka[a].liczba_egzemplarzy << endl;
    }

 return biblioteka[a];
}


int main()
{
    for(biblioteka[a]; a<=9; a++)
    {
    cout << "Podaj tytul ksiazki nr " << a << ": ";
    cin >> biblioteka[a].tytul;
    cout << endl << "Podaj autora ksiazki nr " << a << ": ";
    cin >> biblioteka[a].autor;
    cout << endl << "Podaj nr ISBN ksiazki nr " << a << ": ";
    cin >> biblioteka[a].ISBN;
    cout << endl << "Podaj liczbe egzemplarzy ksiazki nr " << a << ": ";
    cin >> biblioteka[a].liczba_egzemplarzy;
    cout << "\n\n\n";
    }

    cout << "Teraz program wypisuje dane z tablicy biblioteka: " << endl;

    wypis(a);

    cin.get();
    cin.get();
    return 0;
}

W poprzednim kodzie program nie wyświetlał mi drugiej pętli for nie wiem dlaczego (wybacz, ale to moje pierwsze kroki z programowaniem), więc wpisałem ją do osobnej funkcji wypis(int a) i po wypisaniu przez program danych wszystkich książek wyskakuje znowu błąd windowsa. Czy wpisałem złą wartość jaką ma zwracać ta nowa funkcja? Nie mam już pomysłów.

komentarz 22 czerwca 2017 przez niezalogowany

Okej funkcja ma tylko wypisywać wartości, więc nie musi zwracać wartości (void - brak zwracanej wartości). Funkcja powinna zwracać wartość gdy miała przetworzyć jakiś zestaw danych np gdybyś robił funkcję sprawdzającą ile książek napisał autor XYZ (to wtedy zwracasz tą liczbą). Jeżeli chcesz wypisać całą tablicę musisz wysłać tej funkcji całą tablicę (i ile jest w niej elementów):

#include<iostream>
#include<string>

using namespace std;

struct Ksiazka
{
    string tytul;
    string autor;
    int ISBN;
    int liczba_egzemplarzy;
};

void wypis(Ksiazka tab[], int rozmiar_tablicy )
{
    for(int a=0; a<rozmiar_tablicy; a++)
    {
        cout << "tytul: " << tab[a].tytul << ", autor: " << tab[a].autor << ", nr ISBN: " << tab[a].ISBN << ", Liczba egzemplarzy: " << tab[a].liczba_egzemplarzy << endl;
    }
}


int main()
{
    int ile = 2; // żeby nie zmieniac w calym programie
    Ksiazka biblioteka[ile];

    for(int a=0; a<ile; a++)
    {
        cout << "Podaj tytul ksiazki nr " << a << ": ";
        cin >> biblioteka[a].tytul;
        cout << endl << "Podaj autora ksiazki nr " << a << ": ";
        cin >> biblioteka[a].autor;
        cout << endl << "Podaj nr ISBN ksiazki nr " << a << ": ";
        cin >> biblioteka[a].ISBN;
        cout << endl << "Podaj liczbe egzemplarzy ksiazki nr " << a << ": ";
        cin >> biblioteka[a].liczba_egzemplarzy;
        cout << "\n\n\n";
    }

    cout << "Teraz program wypisuje dane z tablicy biblioteka: " << endl;

    wypis( biblioteka, ile );

    cin.get();
    cin.get();
    return 0;
}

PS. Nie używaj zmiennych globalnych ;)

komentarz 22 czerwca 2017 przez wojo44 Nowicjusz (160 p.)

Dzięki MISTRZU!

wszystko śmiga jak marzenie smiley

Podobne pytania

0 głosów
2 odpowiedzi 1,358 wizyt
pytanie zadane 15 lutego 2018 w C i C++ przez Baśka Nowicjusz (150 p.)
0 głosów
3 odpowiedzi 21,751 wizyt
0 głosów
2 odpowiedzi 194 wizyt

92,768 zapytań

141,692 odpowiedzi

320,510 komentarzy

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

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!

...