Struktura ve struktuře

Člen struktury může mít jakýkoli datový typ, třeba i pole nebo jinou strukturu. Pole ve struktuře už znáte: je jím každé char jmeno[20]. Stejně funguje i pole čísel. A když ve struktuře k sobě patří několik hodnot, například den, měsíc a rok data, můžete z nich udělat samostatnou strukturu:

typedef struct {
    int den;
    int mesic;
    int rok;
} Datum;

typedef struct {
    char jmeno[20];
    Datum narozeniny;
    int body[3];
} Hrac;

Hráč (Hrac) basketbalového týmu má jméno, datum narození typu Datum a body z posledních tří zápasů. Datum musí být definované nad strukturou Hrac: překladač čte program shora a ve chvíli, kdy dojde ke členu narozeniny, už musí Datum znát.

Když hráče vytváříte, vnořená struktura i vnořené pole dostanou každé své vlastní složené závorky:

Hrac eva = {"Eva", {14, 3, 2011}, {12, 8, 15}};

K vnořené hodnotě se dostanete tak, že tečky a hranaté závorky řetězíte za sebou a čtete je zleva doprava. eva.narozeniny je celé Datum, a tak eva.narozeniny.rok je jeho rok. eva.body je pole, a tak eva.body[0] je jeho první prvek:

printf("%s se narodila v roce %d.\n", eva.jmeno, eva.narozeniny.rok);
printf("Body v prvním zápase: %d\n", eva.body[0]);

Tento kód vypíše:

Eva se narodila v roce 2011.
Body v prvním zápase: 12

Vnořené pole projdete cyklem jako každé jiné pole:

int soucet = 0;
for (int i = 0; i < 3; i++) {
    soucet += eva.body[i];
}
printf("Body celkem: %d\n", soucet);

Tento kód vypíše:

Body celkem: 35

Když v řetězu nějaký krok vynecháte, například eva.rok, překladač ohlásí, že Hrac žádný člen rok nemá. A má pravdu: rok je členem Evina data narození, ne Evy samotné.

main.c:17:58: error: no member named 'rok' in 'Hrac'

Pokyny

Zara, hrdinka hry, udělá tři kroky doprava. Pod printf přičtěte 3 k souřadnici x její pozice: x je členem pozice a pozice je členem zara. Pak její pozici vypište jako Pozice: 5, 5 a obě čísla přitom přečtěte ze členů.

Zara ve třech úrovních hry sbírala mince a jejich počty jsou v poli mince. Na konci main (před return 0;) je sečtěte v cyklu a vypište Mince: 21.

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

5/9