Č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.00

Pří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);
      |                                                           ~~~~~~ ^

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

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

Nebo se registrujte pomocí:

2/9