Problem ze Struktura

0
#include <iostream>
#include <fstream>
using namespace std;

struct Student
{
       char imie[10];
       char nazwisko[10];
       };

void pobierz(Student &osoby)
{
    int r;
    cout << "Podaj ilosc osob: " << endl;
    cin >> r;
    for(int i=0;i<r;i++)
    {
    cout << "Podaj imie: " << endl;
    cin >> osoby.imie;
    cout << "Podaj nazwisko: " << endl;
    cin >> osoby.nazwisko;
    }
}

void wypisz(Student &osoby)
{
     int r;
     cout << "Podaj ilosc osob: " << endl;
     cin >> r;
     for(int i=0;i<r;i++)
     {
             cout << osoby.imie << endl;
             cout << osoby.nazwisko << endl;
             }
     }

int main()
{   
    pobierz(Student osoby);
    wypisz(Student osoby);
    system("PAUSE");
    return 0;
}

Oto mój problem, przy kompilacji wyświetlają mi się dwa błędy przy expected primary-expression before "osoby" przy wywolaniu funkcji pobierz i wypisz. Nie mam pojęcia co mogłoby być źle dlatego proszę o pomoc. Czy mógłby mi ktoś pomóc?

0

pobierz(Student osoby);
Po co dodatkowo napisałeś Student?
Poza tym do funkcji przekazujesz jedną i tę samą strukturę, którą za każdym razem nadpisujesz nowymi danymi.
Poczytaj o tablicach....

0

gdy usunę Student to wyświetla się że osoby są niezadeklarowane. Chcę przekazać tą strukturę do funkcji, aby do niej wpisywać dane.

0

Moim zdaniem powinieneś w int main() najpierw utworzyć obiekt:
Student osoby;
Później w funkcji pobierz wywołać ten obiekt za pomocą pobierz(osoby);
i tak samo postąpić w wypisz. Wtedy powinno zadziałać ;).

Edit: Może bardziej "zadziałać", ale przynajmniej się skompiluje i wtedy sam zobaczysz co trzeba jeszcze tutaj zmienić.

0

OMG. Jakim cudem chcesz pisać program ze strukturami skoro nie umiesz stworzyć zmiennej jakiegoś typu?

Student mietek;
pobierz(mietek);
wypisz(mietek);
0

Ok dzięki zadziałało:)
dopiero zaczynam i nie mogłem znaleźć informacji na ten temat.

A jeśli będę chciał edytować któryś z numerów tablicy to jak mam się odwołać do danego indeksu w strukturze np do drugiego studenta? chodzi mi o edycje imienia stojącego na drugiej pozycji.

0

Przepraszam że piszę post pod postem.
Dlaczego tablica nadpisuje się przy większej liczbie studentów niż 2?

0

Jaka tablica? :|

0
kodekQ napisał(a):

Przepraszam że piszę post pod postem.
Dlaczego tablica nadpisuje się przy większej liczbie studentów niż 2?

Problem nie jest trudny, więc dam tylko wskazówkę ;). W strukturze masz tablice. Natomiast w funkcji odwołujesz się do nich tak:

for(int i=0;i<r;i++)
    {
    cout << "Podaj imie: " << endl;
    cin >> osoby.imie;
    cout << "Podaj nazwisko: " << endl;
    cin >> osoby.nazwisko;
    }

Znajdź po prostu sposób na to, aby kompilator wiedział co zrobić z tą pętlą, aby te dane znalazły się w odpowiednich miejscach w strukturze :).

Edit: Albo może trochę jaśniej, żebyś nie stwierdził, że chodzi o tablice w strukturze. Znajdź sposób, żeby dane znajdowały się w odpowiednich miejscach w strukturach :).

0

niestety nie wiem jak to zrobić, dane w strukturze nadal się nadpisują..

0

Przecież ty masz tu jedną zmienną...

0

już rozumiem na czym polega błąd. Dane nadpisują się bo są dodawane do tej samej zmiennej np imie a nie do tablicy osoby.
tylko że tym razem pojawia się błąd

no match for 'operator[]' in 'osoby[i]'

#include <iostream>
#include <fstream>
using namespace std;

struct Student
{
       char imie[50];
       char nazwisko[50];
       };

void pobierz(Student &osoby)
{

    int r;
    cout << "Podaj ilosc osob: " << endl;
    cin >> r;
    for(int i=0;i<r;i++)
    {
    cout << "Podaj imie: " << endl;
    cin >> osoby[i].imie;
    cout << "Podaj nazwisko: " << endl;
    cin >> osoby[i].nazwisko;
    }
}

void wypisz(Student &osoby)
{
     int r;
     cout << "Podaj ilosc osob: " << endl;
     cin >> r;
     for(int i=0;i<r;i++)
     {
             cout << osoby[i].imie << endl;
             cout << osoby[i].nazwisko << endl;
             }
     }


int main()
{   
    Student osoby[15];
    pobierz(osoby[15]);
    wypisz(osoby[15]);
    system("PAUSE");
    return 0;
}
0

Do funkcji musisz przekazać tablicę, a nie element (do tego nieistniejący :/), ponadto funkcja musi oczekiwać funkcji, a nie pojedynczego elementu.
Weź poczytaj kurs lub książkę z którego korzystasz do końca.

0

A jaki kurs, książkę polecacie? Może ze złej korzystam, podajcie nazwy ewentualnie linki do kursów:)

0

Biorąc pod uwagę że dość topornie ci idzie to proponuje Symfonie C++ ;)

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