Příkaz return ukončí funkci
Příkaz return dělá dvě věci najednou: vrátí hodnotu a hned ukončí funkci. Zbytek funkce se už neprovede:
#include <stdio.h>
int secti(int a, int b) {
return a + b;
printf("Tento řádek se nikdy neprovede.\n");
}
int main(void) {
printf("%d\n", secti(2, 3));
return 0;
}Tento program vypíše:
5Řádek za return se nikdy neprovede, protože funkce už skončila.
To se hodí hlavně v kombinaci s podmínkami. Tato funkce vrátí větší ze dvou čísel:
#include <stdio.h>
int vetsi(int a, int b) {
if (a > b) {
return a;
}
return b;
}
int main(void) {
printf("%d\n", vetsi(7, 3));
printf("%d\n", vetsi(2, 9));
return 0;
}Tento program vypíše:
7
9U vetsi(7, 3) platí podmínka 7 > 3, a tak funkce vrátí 7 a hned skončí. Poslední řádek se neprovede. U vetsi(2, 9) podmínka neplatí, tělo if se přeskočí, funkce dojde k return b; a vrátí 9. Žádné else není potřeba: jakmile se provede return, zbytek funkce se stejně přeskočí. (S else by funkce fungovala stejně.)
Když je podmínek víc, záleží na jejich pořadí, protože vyhraje první return, který se provede. Tato funkce dá hráči podle počtu bodů tři, dvě, nebo jednu hvězdičku:
#include <stdio.h>
int hvezdicky(int body) {
if (body >= 90) {
return 3;
}
if (body >= 50) {
return 2;
}
return 1;
}
int main(void) {
printf("%d\n", hvezdicky(95));
printf("%d\n", hvezdicky(60));
printf("%d\n", hvezdicky(20));
return 0;
}Tento program vypíše:
3
2
1Pro 95 bodů platí první podmínka, a tak funkce vrátí 3. Pro 60 bodů první podmínka neplatí a druhá ano: 2. Pro 20 bodů neplatí ani jedna, a tak funkce dojde až na poslední řádek a vrátí 1. Kdyby funkce nejdřív kontrolovala body >= 50, dostal by hráč s 95 body jen 2 hvězdičky, protože i 95 je aspoň 50.
Pozor na poslední return. Funkce, která není void, musí vrátit hodnotu, ať podmínky dopadnou jakkoli. Bez řádku return 1; by funkce pro 20 bodů neměla co vrátit a program by se nepřeložil: error: non-void function does not return a value in all control paths. Konec hlášky, in all control paths, znamená „ve všech případech“: překladač si všiml, že funkce může jednou z cest dojít až na konec bez return.
Ve funkci typu void můžete napsat return; bez hodnoty. Funkce pak jen skončí. To se hodí, když má funkce skončit předčasně, protože svou práci udělat nemůže:
#include <stdio.h>
void vypis_podil(int a, int b) {
if (b == 0) {
printf("Nulou dělit nejde.\n");
return;
}
printf("%d\n", a / b);
}
int main(void) {
vypis_podil(10, 2);
vypis_podil(10, 0);
return 0;
}Tento program vypíše:
5
Nulou dělit nejde.Jak psát:
Pokyny
Funkce cena_vstupenky vrací cenu vstupenky do zoo pro návštěvníka daného věku. Zatím vrací všem 200. Nad řádek return 200; přidejte podmínky: děti mladší 6 let mají vstup zdarma (0) a návštěvníci mladší 18 let platí 100. Program pak vypíše 0, 100 a 200.
Senioři od 65 let platí také 100. Přidejte pro ně do funkce podmínku a na konci main, před return 0;, vypište cena_vstupenky(70). Program vypíše ještě jednu 100.
Začněte programovat zdarma
7/12