Struktury, problem z tablicami i pętlami

0

Witam.
Wczoraj na lekcji dostaliśmy zadanie ze struktur. Polegało ono na tym, że program za pomocą struktur wczytuje imię, nazwisko i wiek 3 osób, po czym wyświetla je w formacie: "Jan Kowalski ma 18 lat.".
Męczyłem się dosyć długo, bo chciałem, żeby program jak najmniej zajmował. Próbowałem wykorzystać tablice do wczytywania liczb i chciałem poprzez petle wczytywac dane i kojarzyć je z polami struktur, no ale niestety się nie udawało. Długo się męczyłem i niestety musiałem zrobić ten program bez pętli i wygląda on następująco:

#include <iostream>
using namespace std;
struct osoby
{
      string imie, nazwisko;
      int wiek;
};
int main()
{
    string a,b;
    int c;
    cout<<"Imie, Nazwisko, Wiek"<<endl;
    cin>>a>>b>>c;
    osoby uczen1 ={a,b,c,};
    cout<<"Imie, Nazwisko, Wiek"<<endl;
    cin>>a>>b>>c;
    osoby uczen2 ={a,b,c,};
    cout<<"Imie, Nazwisko, Wiek"<<endl;
    cin>>a>>b>>c;
    osoby uczen3 ={a,b,c,};
cout<<uczen1.imie<<" "<<uczen1.nazwisko<<" ma "<<uczen1.wiek<<" lat."<<endl;
cout<<uczen2.imie<<" "<<uczen2.nazwisko<<" ma "<<uczen2.wiek<<" lat."<<endl;
cout<<uczen3.imie<<" "<<uczen3.nazwisko<<" ma "<<uczen3.wiek<<" lat."<<endl;
system("pause");
return 0;
}

Dzisiaj z nudów postanowiłem znowu się pomęczyć, ale efektów większych nie ma...
Wklejam program, może znajdziecie jakieś błędy.
Nie wykluczam faktu, iż wykorzystanie pętli w ten sposób jest niemożliwe.

#include <iostream>
using namespace std;
struct osoby {
       string imie;
       string nazwisko;
       int wiek;
       };
int main()
{
    string tab1[3],tab2[3];
    int tab3[3];
    for (int b=0; b<=2; b++)
    {
        cout<<"Podaj imie, nazwisko i wiek, kazda dana potwierdzaj enterem"<<endl;
        cin>>tab1[b]>>tab2[b]>>tab3[b];
    }
    for (int b=0; b<=2; b++)
    {
        osoby uczen[b] =
        {
               tab1[b],
               tab2[b],
               tab3[b],
        };
    cout<<uczen[b].imie<<" "<<uczen[b].nazwisko<<" ma "<<uczen[b].wiek<<" lat."<<endl;
    }
system("pause");
return 0;
}

Z góry wielkie dzięki za wszelką pomoc. Pozdrawiam.
PS: Przepraszam za kilka tematów, ale wychodziła notka, że jakieś problemy ze SQL i nie można stworzyć nowego tematu, a potem patrze, że założyło aż 3 razy temat ;/

0

Powinieneś powiedzieć o jakie błędy ci chodzi, czego nie rozumiesz. Przynajmniej tak mi się wydaje, a nie, że rzucasz kodem i szukajcie. Nawet nie powiedziałeś, czy to się kompiluje czy nie ;).

osoby uczen[b] =
        {
               tab1[b],
               tab2[b],
               tab3[b],
        };

Tutaj masz dziwny kod. Niby masz zamiar stworzyć tablicę uczeń (w pętli ?!), a raczej 3 tablice o różnych rozmiarach. Gdyby nie to, że kompilator na etapie kompilacji musi znać rozmiar tych tablic, więc tutaj na pewno krzyczy że mu coś nie pasuje. Od biedy ujdzie to co napisałeś z tą pętlą, gdybyś to poprawił. Ale nie rozumiem dlaczego tak dziwnie wprowadzasz dane do tych struktur. Być może nie doczytałeś o nich. Nie lepiej było by zrobić sobie na starcie tablicę 3 osób, potem w pętli po kolei uzupełniać już bezpośrednio pola struktur odpowiedniej osoby?

Coś w tym stylu:

osoby uczen[3];

for(int i=0; i<3; i++) {
    cin >> uczen[i].imie >> uczen[i].nazwisko >> uczen[i].wiek;
}

Tak samo wypisywanie. Albo i od razu w tej samej pętli.

0

int main()
{
osoby os[3];
cout << "Imie, Nazwisko, Wiek" << endl;
for(unsigned int i = 0; i < 3; i++)
{
cin >> os[i].imie;
cin >> os[i].nazwisko;
cin >> os[i].wiek;
cout << endl;
cout << "ID: " << i << endl << "Imie: " << os[i].imie.c_str() << endl << "Nazwisko: " << os[i].nazwisko.c_str() << endl << "Wiek: " << os[i].wiek << endl << endl;
}
system("pause");
return 0;

0

Dzięki wielkie za pomoc :) Działa jak należy...
Co do tego mojego niedoczytania. Nie jestem samoukiem, ale uczę się C++ w szkole na kierunku technik-informatyk. Niestety mamy takiego nauczyciela od programowania co mało się zna i nie potrafi nic nam przekazać ani niczego nauczyć... Tylko da nam przykładowy program, czy to z książki, czy to z neta, podyktuje coś teorii z książki, nic nie wytłumaczy i w ogóle...

#include <iostream>
using namespace std;
struct osoby {
       string imie,nazwisko;
       int wiek;
       };
int main()
{
    osoby uczen[3];
    cout<<"Podaj imie, nazwisko i wiek, kazda dana potwierdzaj enterem"<<endl;
    for (int b=0; b<=2; b++)
    {
        cout<<"ID: "<<b+1<<endl;
        cin>>uczen[b].imie>>uczen[b].nazwisko>>uczen[b].wiek;
    }
    for (int b=0; b<=2; b++)
    cout<<uczen[b].imie<<" "<<uczen[b].nazwisko<<" ma "<<uczen[b].wiek<<" lat."<<endl;
system("pause");
return 0;
}

Jeszcze raz wielkie dzięki za wytłumaczenie ;-)

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