wtorek, 26 stycznia 2016

C - Instrukcja warunkowa switch case

W tym poście chciałbym opisać sposób zastosowania instrukcji warunkowej switch...case.


Instrukcja prezentuje się w następujący sposób:

switch(wartosc)
{
  case 1:
  {
    ...
    break;
  }
  case 2:
  {
    ...
    break;
  }
  case n:
  {
    ...
    break;
  }
  default:
  {
    ...
    break;
  }
}

Na samym początku rozpoczynamy od zadeklarowania instrukcji switch. W nawiasie podawana jest wartość jaka będzie wykorzystywana do wybierania poszczególnych części instrukcji.

Następnym słowem kluczowym jest case, działa to tak, że jeśli wartość jest taka jak ta zdeklarowana, wtedy zostanie wykonana konkretna, przypisany fragment programu. Wykonywanie kończy słowo break które wychodzi z instrukcji. Bez uwzględnienia tego słowa program dalej kontynuował by wykonywanie tej instrukcji, aż do zakończenia całej instrukcji lub do natrafienia na słowo default.

Jeśli wartość jest inna od tych które zostały przypisane do wyboru, wtedy zostaje wykonany kod wpisany po słowie default. Ta wartość jest nie wymagana, można zdeklarować instrukcję bez jej udziału. 

Co do dozwolonych typów danych, to można korzystać tylko i wyłącznie z całkowitych tzn. takich jak: int, long, short, chart oraz wszystkich pochodnych od nich. 

Poniżej przedstawiam krótki przykład. W zależności od wpisanego znaku, wykonywana jest inna operacja matematyczna.

 
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int zmienna = 10;
    char znak = '+';
 
    printf("Podaj znak: +, *, /.\n");
    scanf("%c", &znak);
 
    switch(znak)
    {
      case '+':
      {
          zmienna += 4;
          printf("Wynik dodawania: %d\n", zmienna);
          break;
      }
      case '*':
      {
          zmienna *= 2;
          printf("Wynik mnozenia: %d\n", zmienna);
          break;
      }
      case '/':
      {
          zmienna /= 4;
          printf("Wynik dzielenia%d\n", zmienna);
          break;
      }
      default:
      {
          printf("Brak operacji: %d", zmienna);
          break;
      }
    }
    return 0;
}

Można też deklarować zmienne wewnątrz instrukcji warunkowej, a dokładniej za instrukcją case, tak aby była ona dostępna tylko z tego poziomu. Przykład przedstawiłem poniżej:

    switch(znak)
    {
      case '+':
      {
          int zmienna2 = 4;
          zmienna = zmienna + zmienna2 + 4;
          printf("Wynik dodawania: %d\n", zmienna);
      }

Zdeklarowanie zmiennej pomiędzy słowem switch i case, nie zda egzaminu. Ponieważ wtedy nie zostanie ona poprawnie zainicjalizowana.