Pole struktur
Strukturu můžeme výhodně použít např. v různých seznamech. V téhle části si ukážeme, jak použít struktury v poli.
Chceme vytvořit seznam studentů. Pro informace o studentovi použijeme strukturu, kterou definujeme jako datový typ. Je to výhodné pro její další použití ve funkcích.
typedef struct{
char prijmeni[20], jmeno[20];
int absence;
float prumer;
}Tstudent;
Pro zapsání více studentů použijeme pole typu Tstudent. Ve funkcích pro načtení studentů od uživatele a pro výpis informací o studentech použijeme pole jako parametr funkce. Připomeňme si, že pole je vždy vstupně-výstupní parametr. Nemusíme ho proto např. ve funkci pro načtení z funkce vracet přes return - změny provedené v poli se automaticky uloží.
//funkce vloží do pole zadaný počet studentů
//informace zadáváme z klávesnice
//zapisuje studenty vždy od začátku pole
//pokud bylo v poli něco uloženo, informace přepíše
int nacteni_studentu(Tstudent trida[])
{
int pocet, i;
//urceni poctu studentu
do{
printf("Zadejte pocet studentů (max. %d): ", MAX);
scanf("%d", &pocet);
}while(pocet > MAX || pocet < 0);
//nacteni informaci o studentech
for(i = 0; i < pocet; i++)
{
printf("\nZadejte udaje pro %d.studenta :\n", i+1);
fflush(stdin);
printf("\tjmeno : ");
gets(trida[i].jmeno); //je vhodné použit fgets()
fflush(stdin);
printf("\tprijmeni : ");
gets(trida[i].prijmeni); //je vhodné použit fgets()
printf("\tabsence : ");
scanf("%d", &trida[i].absence);
printf("\tprumer : ");
scanf("%f",&trida[i].prumer);
return pocet;
}
//vypis informaci o studentech
void vypis(Tstudent trida[], int pocet)
{
if (pocet == 0) {
printf("\nPrazdny seznam\n");
return;
}
printf("\nSeznam studentu :");
printf("\n\nJmeno: Prijmeni: Absence: Prumer:");
for(i = 0; i < pocet; i++)
{
printf("\n%10s%17s%7d%10.2f",trida[i].jmeno,trida[i].prijmeni, trida[i].absence, trida[i].prumer);
}
printf("\n\n");
}