Přepínač switch
Pro vícenásobné větvení se v jazyce C používá příkaz switch. V programu je většinou možné nahradit ho několika příkazy if, ale správně použitý příkaz switch je mnohem přehlednější. V podmíněném příkazu if jsme se rozhodovali na základě výsledku logického výrazu. Ten má ale jenom 2 možné hodnoty (pravda, nepravda), co nám pro vícenásobné větvení nestačí. V příkazu switch se pro rozhodování používá celočíselný výraz, u kterého testujeme jeho jednotlivé hodnoty.
Obecný popis (syntaxe) příkazu switch:
switch (celociselny_vyraz)
{
case hodnota_1: prikaz1; break;
case hodnota_2: prikaz2; break;
...
case hodnota_n: prikazn; break;
default: prikaz_def;
}
Poznámky ke zpracování příkazu switch:
- v závorkách za klíčovým slovem switch použijeme jedině celočíselnou proměnnou nebo celočíselný výraz
- když hodnota výrazu je hodnota_1, vykoná se prikaz1. Příkaz switch končí, pokračuje se dále v programu. Podobně se postupuje pro hodnota_2 až hodnota_n
- část default je nepovinná část příkazu switch. Příkaz prikaz_def se vykoná v případě, že hodnota celočíselného výrazu neodpovídá žádné z hodnot uvedených v částech case. Často se využívá pro ošetření chyb
- příkaz break znamená ukončení příkazu switch po každé jednotlivé části case. Pokud ho neuvedeme pokračuje se v příkazu switch na dalším řádku
- jako celočíselný výraz pro rozhodování se často používají znaky. Datový typ char patří totiž mezi celočíselné datové typy. V tom případě musíme u jednotlivých hodnot za case použít apostrofy
- příkaz switch se často v programech používá pro vytvoření a testování uživatelské nabídky
V příkladech uvedeme 2 varianty stejného programu. Ukazují různé možnosti použití přepínače. Program bude počítat součet, rozdíl, součin nebo podíl dvou zadaných čísel. Typ operace vybere uživatel výběrem z nabídky (1.varianta) nebo zadáním operátoru (2.varianta).
/* * 1.varianta * prepinac switch pouzity pro urceni operace podle nabidky */ #include <stdio.h> #include <stdlib.h> int main() { float x,y,z; int volba; printf("\nZadejte 2 cisla :\n"); printf("\tcislo1 : "); scanf("%f",&x ); printf("\tcislo2 : "); scanf("%f",&y ); printf("1 - soucet\n"); printf("2 - rozdil\n"); printf("3 - soucin\n"); printf("4 - podil\n"); printf("\nVyberte operaci : "); scanf("%d", &volba); switch(volba) { case 1: z=x+y; printf("Vysledek : %.2f + %.2f = %.2f\n", x, y, z); break; case 2: z=x-y; printf("Vysledek : %.2f - %.2f = %.2f\n", x, y, z); break; case 3: z=x*y; printf("Vysledek : %.2f *%.2f = %.2f\n", x, y, z); break; case 4: if (y != 0) { z=x/y; printf("Vysledek : %.2f / %.2f = %.2f\n", x, y, z); } else printf("Nelze delit nulou\n"); break; default: printf("Spatne zadana operace\n"); } system("pause"); return 0; }
// 2. varianta // prepinac switch pouzity pro urceni operace podle zadaneho operatora #include <stdio.h> #include <stdlib.h> int main() { float x,y,z; int chyba=0; char op; printf("\nZadejte priklad :"); //napr. 2+3, 17*4, ... scanf("%f%c%f",&x ,&op ,&y); switch(op) { case '+': z=x+y; break; case '-': z=x-y; break; case '*': z=x*y; break; case '/': if (y) z=x/y; else chyba=2; break; default: chyba=1; } //promenna chyba je pouzita pro urceni typu vystupu - vysledek nebo chyba if (chyba == 0) printf("Vysledek : %.2f %c %.2f = %.2f", x,op,y,z); if (chyba == 1) printf("Spatne zadany operator"); if (chyba == 2) printf("Nelze delit nulou"); system("pause"); return 0; }