Struktura
Proměnné typu struktura používáme v jazyce C pro uložení údajů různých datových typů např. informace o studentovi(jméno, příjmení, absence, studijní průměr...). Máme potom všechny informace v jedné proměnné. Výhodné je definovat strukturu jako uživatelský datový typ. Tato definice se uvádí globálně (mimo jakoukoliv funkci) na začátku programu.
Dílčí informace nazýváme položky. K jednotlivým položkám se v struktuře dostaneme přes operátor . (tečka). Na rozdíl od pole, můžeme se strukturou pracovat jako s celkem, např. v jednom příkazu přiřadit hodnoty z jedné struktury do druhé. Pokud chceme ale informace ze struktury vypsat na obrazovku, musíme je vypisovat postupně po položkách, protože můžou mít různé datové typy.
Definice struktury jako uživatelský datový typ:
typedef struct{
typ polozka1;
typ polozka2;
...
} TNAZEV;
Z důvodu přehlednosti kódu doporučujeme odlišit názvy proměnných od názvů datových typů. Pro datový typ použijeme např. na začátku názvu datového typu velké písmeno T. Víme potom, že pokud identifikátor začíná na T, jedná se o název datového typu a ne o název proměnné. Proměnnou tohoto typu potom deklarujeme:
TNAZEV nazev_prom;
Přístup k položkám struktury nazev_prom v programu můžeme vzhledem k předchozím deklaracím obecně zapsat nazev_prom.polozka1.
Dále jsou uvedeny příklady definice a deklarace struktury a použití struktury v programu.
typedef struct{
int cislo;
char nazev[20];
float cena;
}Tkniha;
- definujeme datový typ Tkniha s položkami cislo, nazev a cena
Tkniha prvni;
- deklarujeme proměnnou prvni, jedná se o jednoduchou proměnnou typu Tkniha. Každá proměnná typu Tkniha je strukturou a obsahuje informace o knize. Pokud chceme v programu pracovat s jednotlivými informacemi o knize v proměnné prvni, můžeme to zapsat: prvni.cislo, prvni.nazev nebo prvni.cena.
Př. funkce pro načtení a výpis informací o knize.
//definice funkce, ktera načte informace o knize, načtenou knihu vrátí přes return Tkniha nacti_knihu() { Tkniha nova; printf("zadejte informace o knize: \n"); printf("\tcislo: "); scanf("%d",&nova.cislo); fflush(stdin); //vyprazdneni vstupniho bufferu printf("\tnazev knihy: "); gets(nova.nazev); printf("\tcena: "); scanf("%f",&nova.cena); return nova; } //definice funkce, ktera vypise informace o knize na 1 radek void vypis_knihu(Tkniha x) { printf("%d, %s, %.2f Kc\n", x.cislo, x.nazev, x.cena); }
V případě zpracování v projektu, umístíme definici datového typu a deklarace funkcí do hlavičkového souboru.