Pole struktur
Představte si seznam hor, každou s názvem a výškou. Jedna hora je jedna struktura. Abyste jich uložili víc, použijete to, co už znáte: pole. Struktura je datový typ jako každý jiný, a tak můžete vytvořit i pole struktur:
#include <stdio.h>
typedef struct {
char nazev[20];
int vyska;
} Hora;
int main(void) {
Hora hory[3] = {
{"Everest", 8849},
{"K2", 8611},
{"Lhotse", 8516}
};
for (int i = 0; i < 3; i++) {
printf("%-8s %5d m\n", hory[i].nazev, hory[i].vyska);
}
return 0;
}Program vypíše:
Everest 8849 m
K2 8611 m
Lhotse 8516 mKaždý prvek pole se zapíše jako samostatná struktura ve složených závorkách a prvky se oddělují čárkami, jako v každém poli. hory[0] je celá první hora, Everest. Zápis hory[i].nazev čtěte zleva doprava: nejdřív vezměte prvek pole s indexem i, potom jeho člen nazev.
Typickou chybou je opačné pořadí: hory.nazev[i]. To by znamenalo „člen nazev pole hory“, jenže pole nemá členy, jen prvky:
main.c:16:36: error: member reference base type 'Hora[3]' is not a structure or union
16 | printf("%-8s %5d m\n", hory.nazev[i], hory[i].vyska);
| ~~~~^~~~~~Hláška říká, že to, co stojí před tečkou, tedy datový typ Hora[3] (pole tří hor), není struktura. (Union je něco podobného struktuře, co v tomto kurzu nepoužíváme.)
Stejně jako v lekci o řetězcích nastavuje printf v cyklu šířku sloupců, aby byly hezky pod sebou. %-8s vypíše text do sloupce širokého 8 znaků zarovnaný doleva (to dělá znaménko -) a %5d vypíše číslo do sloupce širokého 5 znaků zarovnané doprava. U desetinných čísel znamená %6.2f dvě desetinná místa a celkovou šířku 6 znaků.
Pozor jen na písmena s diakritikou: šířka se počítá ve znacích typu char a písmeno jako é jich v řetězci zabírá dva. Řádek s textem „Mléko“ by proto byl o jedno místo kratší a sloupce by se rozjely. V tabulkách proto používáme názvy bez diakritiky.
Místo počtu 3 v cyklu můžete nechat program počet spočítat, stejně jako u každého pole: const int POCET = sizeof(hory) / sizeof(hory[0]); Velikost celého pole vydělená velikostí jednoho prvku je počet prvků, ať jsou v poli čísla, nebo struktury.
Jak psát:
Pokyny
Program vypíše jen první produkt v košíku. Nahraďte printf cyklem for, který stejným způsobem vypíše všechny produkty. Program vypíše:
Chleba 32.50 x 2
Jogurt 24.90 x 3
Jablka 8.50 x 6Pod cyklem vypište, kolik stojí celý košík. U každého produktu vynásobte cenu počtem kusů a výsledky sečtěte. Můžete to udělat ve stejném cyklu, nebo v novém. Výsledek vypište na dvě desetinná místa: Celkem: 190.70.
Začněte programovat zdarma
4/9