Dva výsledky najednou
Pomocí return vrátí funkce jen jednu hodnotu. Některé výpočty ale mají výsledky dva. Třeba 135 minut je 2 hodiny a 15 minut, tedy dvě čísla. S ukazateli může funkce uložit do proměnných volajícího tolik výsledků, kolik potřebuje:
#include <stdio.h>
void rozdel_cas(int celkem_minut, int *hodiny, int *minuty) {
*hodiny = celkem_minut / 60;
*minuty = celkem_minut % 60;
}
int main(void) {
int hodiny = 0;
int minuty = 0;
rozdel_cas(135, &hodiny, &minuty);
printf("%d h %d min\n", hodiny, minuty);
return 0;
}Tento kód vypíše:
2 h 15 minPrvní parametr funkce jen čte, a tak je to obyčejný int a můžete mu předat i číslo. Do zbylých dvou funkce zapisuje, a tak jsou to ukazatele a musíte jim předat adresy proměnných. Takovým parametrům se říká výstupní parametry: funkce z nich nečte, ale vyplní je. Podle hvězdiček v prvním řádku funkce tak poznáte, které parametry jsou výsledky.
Proměnné hodiny a minuty musí existovat už před voláním. Tady začínají na 0 a funkce jejich hodnoty přepíše. Když ji zavoláte ještě jednou se stejnými proměnnými, přepíše je znovu. A jako obvykle: když ve volání zapomenete &, překlad skončí chybou s radou take the address with &.
Jak psát:
Pokyny
Místo komentáře napište funkci rozdel se čtyřmi parametry: bonbony a deti typu int, které jen čte, a ukazateli kazdemu a zbytek typu int *, do kterých uloží výsledky. Funkce rozdělí bonbony mezi děti: každé dítě dostane bonbony / deti bonbonů a bonbony % deti jich zbude.
V main pod printf vytvořte proměnné kazdemu a zbytek s hodnotou 0. Zavolejte funkci rozdel s proměnnými bonbony a deti a s adresami obou nových proměnných. Pak vypište Každé dítě: 3, zbude: 2, obě čísla pomocí %d.
Přišlo ještě jedno dítě. Pod poslední printf přičtěte k deti jedničku, znovu zavolejte rozdel se stejnými proměnnými a stejně vypište výsledek. Program vypíše Každé dítě: 2, zbude: 5.
Začněte programovat zdarma
7/11