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: 12Vnoř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: 35Když 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'Jak psát:
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
5/9