Grananje - naredba switch

1. Višestruko grananje sa switch

Naredba switch-case koristi se u višestrukom grananju programa ako izraz ili varijabla tijekom programa mogu poprimiti različite, uobičajeno, cjelobrojne vrijednosti i ovisno o tim vrijednostima treba izvršiti različite blokove naredbi. U tim je slučajevima kôd znatno pregledniji od kôda naredbe if. Switch omogućuje izbor jednog od više putova izvođenja programa. Koji će se dio programa izvršiti, ovisi o vrijednosti izraza (ili varijable).

Uobičajeno je da konstante u naredbi switch case budu cijeli brojevi, ali zapravo je važno da je to neki redni tip podataka. Redni tip podataka je onaj kod kojeg svakom elementu možemo odrediti sljedbenik i prethodnik. U C-u su redni tipovi podataka char i int ili char i int u kombinaciji s modifikatorima.  

 

Opći je oblik naredbe ovaj:

switch (izraz)
{   
     case konstanta_1: blok naredbi_1;
                     break;
     case konstanta_2: blok naredbi_2;
                       break;
                      . . .
     case konstanta_n-1:  blok naredbi_n-1;
                           break;
     default:   blok naredbi_n;
                break; //nije obavezno
}

 

Naredba switch-case izvršava se na sljedeći način.

Najprije se izračuna vrijednost izraza, a zatim se uspoređuje s nizom konstanti (1 do n-1). Ako je dobivena vrijednost jednaka jednoj od konstanti, izvršava se blok naredbi pridružen toj konstanti. Ako dobivena vrijednost nije jednaka nijednoj od navedenih konstanti, izvršit će se blok naredbi koji je pridružen opciji default.

Izvršavanje bloka naredbi prekida se naredbom break. Ako blok naredbi u case ne završi s break, nastavlja se izvršavati blok naredbi sljedećeg case.

Opcija default može se i izostaviti. U tom će se slučaju, ako vrijednost izraza nije jednaka nijednoj konstanti, izvršavanje programa nastaviti od prve naredbe koja slijedi nakon switch-case strukture.

Dijagramom se to može prikazati na sljedeći način: