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

struktury, wywołanie funkcji C++

VPS Starter Arubacloud
0 głosów
7,928 wizyt
pytanie zadane 28 czerwca 2017 w C i C++ przez Arson90 Nowicjusz (180 p.)
Mam pytanie dotyczące tego kodu, zapewne jest coś z nim nie tak, ale nie mogę znaleźć rozwiązania w necie....
W funkcji wczytaj podaje imie i wiek. Moje pytanie czemu funkcja pokaz wyswietla mi tylko zawartość zmiennej wiek, a zawartość zmiennej imie nie ?

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

struct nowa
{
    int wiek;
    string imie;
};

void wczytaj()
{
    nowa x;
    cin>>x.wiek;
    cin>>x.imie;
}

void pokaz()
{
    nowa y;
    cout<<y.wiek;
    cout<<y.imie;
}

int main()
{
    wczytaj();
    pokaz();

    return 0;
}

 

2 odpowiedzi

+3 głosów
odpowiedź 28 czerwca 2017 przez niezalogowany
edycja 30 sierpnia 2017

Funkcja wczytaj wczytuje dane do obiektu, który jest kasowany w momencie zakończenia działania funkcji. Funkcja pokaz pokazuje przypadkowe wartości z pamięci:

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

struct nowa
{
    int wiek;
    string imie;
};

void wczytaj()
{
    nowa x; // obiekt x żyje odtąd
    cin>>x.wiek;
    cin>>x.imie;
} // dotąd

void pokaz()
{
    nowa y; // obiekt y żyje odtąd
    cout<<y.wiek; // wypisanie przypadkowych wartości z pamięci
    cout<<y.imie; // wypisanie przypadkowych wartości z pamięci
} // dotąd

int main()
{
    wczytaj();
    pokaz();

    return 0;
}

Możesz przekazywać jakiś obiekt funkcjom tak:

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

struct nowa
{
    int wiek;
    string imie;
};

void wczytaj(nowa& x) // ampersand, bo oryginał
{
    cin>>x.wiek;
    cin>>x.imie;
}

void pokaz(nowa& y)
{
    cout<<y.wiek;
    cout<<y.imie;
}

int main()
{
    nowa moj_obiekt;
    wczytaj(moj_obiekt);
    pokaz(moj_obiekt);

    return 0;
}

Możesz też zrobić metody działające na rzecz obiektów tej struktury:

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

struct Nowa
{
    int wiek;
    string imie;

    void wczytaj();
    void pokaz();
};

void Nowa::wczytaj()
{
    cin>>wiek; // domyślnie metoda jest wywoływana na obiekcie
    cin>>imie;
}

void Nowa::pokaz()
{
    cout<<wiek;
    cout<<imie;
}

int main()
{
    Nowa moj_obiekt;
    moj_obiekt.wczytaj();
    moj_obiekt.pokaz();

    return 0;
}
komentarz 11 lipca 2017 przez Arson90 Nowicjusz (180 p.)

yesDzięki wielkie, bardzo dobrze zilustrowane.

+1 głos
odpowiedź 28 czerwca 2017 przez Marcin_N_97 Stary wyjadacz (10,290 p.)
Bo w Twoim kodzie struktura nowa x i nowa y są zmiennymi automatycznymi, w takim razie to co wczytasz do x nie jest w y. Musiałbyś to zwrócić lub przypisac poprzez wskaźnik/referencję by miało to jakieś szance zadziałać. Ehhh. W sumie to za długo tłumaczenia - odpal sobie jakiś poradnik, np.: Zelent na youtubie, cpp0x.pl..

 

To, że wyświetla ci wiek to wyświetla losową liczbe lub 0 - zależnie od używanego kompilatora.
komentarz 28 czerwca 2017 przez Arson90 Nowicjusz (180 p.)
Dzięki wielkie za wytłumaczenie :) Dokładnie o to mi chodziło.

Podobne pytania

0 głosów
1 odpowiedź 492 wizyt
pytanie zadane 2 lipca 2017 w C i C++ przez kakaPL Nowicjusz (160 p.)
0 głosów
1 odpowiedź 437 wizyt
0 głosów
1 odpowiedź 688 wizyt

93,008 zapytań

141,975 odpowiedzi

321,255 komentarzy

62,350 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!

...