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

Program kompiluje sie poprawnie jednak podaje zly wynik

Object Storage Arubacloud
0 głosów
346 wizyt
pytanie zadane 30 marca 2016 w C i C++ przez Chajol Początkujący (290 p.)

Witam, jak w tytule, program sie kompiluje bez problemu jednak podaje zly wynik, nigdzie nie moge znalezc bledu :(

#include <stdio.h>
#include <stdlib.h>

typedef struct {
int dzieci;
int mezczyzni;
int kobiety;
}LUDZIE;

int liczba_dzieci(LUDZIE osoby);
int liczba_kobiet(LUDZIE osoby);
int liczba_mezczyzn(LUDZIE osoby);

void main(void)
{
    LUDZIE osoby;

    osoby.dzieci;
    osoby.mezczyzni;
    osoby.kobiety;
    liczba_dzieci(osoby);
    liczba_mezczyzn(osoby);
    liczba_kobiet(osoby);
    printf("Liczba osob to: %d\n",osoby.dzieci+osoby.mezczyzni+osoby.kobiety);
}
int liczba_dzieci(LUDZIE osoby)
{
    printf("Prosze podac liczbe dzieci:");
    scanf("%d",&osoby.dzieci);
    return osoby.dzieci;
}
int liczba_mezczyzn(LUDZIE osoby)
{
    printf("Prosze podac liczbe mezczyzn:");
    scanf("%d",&osoby.mezczyzni);
    return osoby.mezczyzni;
}
int liczba_kobiet(LUDZIE osoby)
{
    printf("Prosze podac liczbe kobiet:");
    scanf("%d",&osoby.kobiety);
    return osoby.kobiety;
}

 

1 odpowiedź

0 głosów
odpowiedź 30 marca 2016 przez draghan VIP (106,230 p.)
Żeby przy pomocy funkcji modyfikować zewnętrzny obiekt, musisz jako parametr podać ten obiekt przez wskaźnik. Poza tym linie 18-20 nic pożytecznego nie robią.
komentarz 30 marca 2016 przez Chajol Początkujący (290 p.)
Czyli w nawiasach funkcji mam wpisac np: (LUDZIE *osoby)??

Ok, w takim razie usune linijki 18-20
komentarz 30 marca 2016 przez draghan VIP (106,230 p.)
Tak. A przy wywołaniu dopisz do argumentu operator &, żeby otrzymać adres obiektu i powinno śmigać.
komentarz 30 marca 2016 przez draghan VIP (106,230 p.)
No i oczywiście należy zmienić wtedy operator . na -> w definicjach Twoich funkcji. ;)
komentarz 30 marca 2016 przez Chajol Początkujący (290 p.)
Prototyp wyglada tak: int liczba_dzieci(LUDZIE *osoby);

Wywolanie funkcji w main: liczba_dzieci(&osoby);

Wyskakuje blad przy pierwszym scanf'ie... Error: request for member 'dzieci' in something not a structure or union...
komentarz 30 marca 2016 przez draghan VIP (106,230 p.)
scanf("%d",&osoby -> dzieci);

 

komentarz 30 marca 2016 przez Chajol Początkujący (290 p.)
Zamienilem, ale nadal mam ten sam blad i sie nie kompiluje. Wstawic caly program jak go poprawilem?
komentarz 30 marca 2016 przez draghan VIP (106,230 p.)
Pewnie, zobaczymy co tam jest grane.
komentarz 30 marca 2016 przez Chajol Początkujący (290 p.)

Btw dzieki wielkie za pomoc, sam bym to ogarnal chyba za rok :p 

#include <stdio.h>
#include <stdlib.h>

typedef struct {
int dzieci;
int mezczyzni;
int kobiety;
}LUDZIE;

int liczba_dzieci(LUDZIE *osoby);
int liczba_kobiet(LUDZIE *osoby);
int liczba_mezczyzn(LUDZIE *osoby);

void main(void)
{
    LUDZIE osoby;
    liczba_dzieci(&osoby);
    liczba_mezczyzn(&osoby);
    liczba_kobiet(&osoby);
    printf("Liczba osob to: %d\n",osoby.dzieci+osoby.mezczyzni+osoby.kobiety);
}
int liczba_dzieci(LUDZIE *osoby)
{
    printf("Prosze podac liczbe dzieci:");
    scanf("%d",&osoby -> dzieci);
    return osoby.dzieci;
}
int liczba_mezczyzn(LUDZIE *osoby)
{
    printf("Prosze podac liczbe mezczyzn:");
    scanf("%d",&osoby -> mezczyzni);
    return osoby.mezczyzni;
}
int liczba_kobiet(LUDZIE *osoby)
{
    printf("Prosze podac liczbe kobiet:");
    scanf("%d",&osoby -> kobiety);
    return osoby.kobiety;
}

 

komentarz 30 marca 2016 przez draghan VIP (106,230 p.)

To powinno wyglądać jakoś tak:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
int dzieci;
int mezczyzni;
int kobiety;
}LUDZIE;

int liczba_dzieci(LUDZIE *osoby);
int liczba_kobiet(LUDZIE *osoby);
int liczba_mezczyzn(LUDZIE *osoby);

int main(void)
{
    LUDZIE osoby;
    liczba_dzieci(&osoby);
    liczba_mezczyzn(&osoby);
    liczba_kobiet(&osoby);
    printf("Liczba osob to: %d\n",osoby.dzieci+osoby.mezczyzni+osoby.kobiety);
    return 0;
}
int liczba_dzieci(LUDZIE *osoby)
{
    printf("Prosze podac liczbe dzieci:");
    scanf("%d",&osoby -> dzieci);
    return osoby -> dzieci;
}
int liczba_mezczyzn(LUDZIE *osoby)
{
    printf("Prosze podac liczbe mezczyzn:");
    scanf("%d",&osoby -> mezczyzni);
    return osoby -> mezczyzni;
}
int liczba_kobiet(LUDZIE *osoby)
{
    printf("Prosze podac liczbe kobiet:");
    scanf("%d",&osoby -> kobiety);
    return osoby -> kobiety;
}

Ja spadam teraz na zajęcia, ewentualne poprawki dopiero po 18.00. :P

komentarz 30 marca 2016 przez Chajol Początkujący (290 p.)
Ok i tak dzieki wielkie!
komentarz 30 marca 2016 przez Chajol Początkujący (290 p.)
Wszystko smiga :D
komentarz 30 marca 2016 przez draghan VIP (106,230 p.)
Cieszy mnie to. Różnica między moją a Twoją wersją to zmiana operator wyłuskania, czyli kropki, na operator dereferencji-wyłuskania (czy jak ludzie to jeszcze zechcą nazwać), czyli "strzałkę". Od strony programisty - używa się ich tak samo, tylko wersja strzałkowa służy do pracy ze wskaźnikami na obiekty.

Podobne pytania

+1 głos
2 odpowiedzi 304 wizyt
0 głosów
2 odpowiedzi 169 wizyt
0 głosów
1 odpowiedź 486 wizyt

92,617 zapytań

141,467 odpowiedzi

319,783 komentarzy

61,999 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...