headerphoto

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;
   }       

Design downloaded from Free Templates - your source for free web templates