Členy struktury
Člen struktury funguje jako obyčejná proměnná: můžete ho číst, počítat s ním i měnit. Jen musíte říct, čí člen to je. chleba.pocet je počet chlebů, ne rohlíků. Tento program mění členy proměnné chleba a počítá s nimi:
#include <stdio.h>
#include <string.h>
struct produkt {
char nazev[20];
double cena;
int pocet;
};
int main(void) {
struct produkt chleba = {"Chléb", 32.5, 2};
chleba.pocet = 3;
chleba.cena -= 2.5;
printf("%s: %d x %.2f = %.2f\n", chleba.nazev, chleba.pocet, chleba.cena, chleba.pocet * chleba.cena);
strcpy(chleba.nazev, "Rohlíky");
printf("%s: %d x %.2f\n", chleba.nazev, chleba.pocet, chleba.cena);
return 0;
}Program vypíše:
Chléb: 3 x 30.00 = 90.00
Rohlíky: 3 x 30.00Příkaz chleba.pocet = 3; uloží do členu pocet novou hodnotu a chleba.cena -= 2.5; sníží cenu o 2,5. Ostatní členy zůstanou, jak byly. S členy funguje všechno, co znáte z proměnných: +=, ++ nebo podmínka jako if (chleba.pocet > 0).
Jinak je to jen s textovým členem: je to pole a do pole nejde přiřadit pomocí =. Kdybyste místo řádku se strcpy napsali chleba.nazev = "Rohlíky";, program by se nepřeložil:
main.c:16:18: error: array type 'char[20]' is not assignable
16 | chleba.nazev = "Rohlíky";
| ~~~~~~~~~~~~ ^Hláška říká, že do pole typu char[20] nejde přiřadit. Proto program text kopíruje funkcí strcpy z string.h, stejně jako do jakéhokoli jiného řetězce. Pole musí mít místo pro nový text i pro '\0' na jeho konci.
Dejte si pozor i na překlepy v názvech členů. Překladač zná jen členy z definice, a tak chleba.cenna skončí chybou, podle které struktura takový člen nemá:
main.c:17:66: error: no member named 'cenna' in 'struct produkt'
17 | printf("%s: %d x %.2f\n", chleba.nazev, chleba.pocet, chleba.cenna);
| ~~~~~~ ^Jak psát:
Pokyny
Hrdinka hry bojuje s drakem. Místo komentáře snižte hrdina.zivoty pomocí -= o 35 a hrdina.uroven zvyšte o jedničku. Pod to hrdinku vypište znovu stejným printf jako nahoře. Program vypíše Zara: úroveň 1, životy 100 a pod tím Zara: úroveň 2, životy 65.
Za poražení draka dostane hrdinka nové jméno. Na konci main (před return 0;) zkopírujte do hrdina.jmeno funkcí strcpy text Zara Statečná (nahoru přidejte #include <string.h>) a hrdinku vypište ještě jednou. Poslední řádek bude Zara Statečná: úroveň 2, životy 65.
Začněte programovat zdarma
2/9