C/C++: Instrukcje warunkowe if i switch
Posted on Tue 29 November 2016 in C/C++
Zdaję sobie sprawę z tego,że ostatni post był nieco przydługi i zostało w nim przekazane więcej elementów, dlatego zdecydowałem się na nieco mniejsze objętościowo posty (jeżeli jakiś temat będzie nieco dłuższy to podzielę go na kilka postów, zamiast starać się upchać wszystko razem). W trzeciej już części artykułów o C++ omówimy dwie konstrukcje tego języka. Jako pierwszą na tapetę weźmiemy konstrukcje warunkową if..else. Instrukcja służy do rozgałęziania naszego kodu w zależności od spełnionego warunku. Podstawowa konstrukcja ma następującą budowę:
if (warunek)
{
//kod wykona się, jeżeli warunek jest prawdziwy
}
else
{
//kod wykona się, jeżeli warunek nie jest prawdziwy
}
Przyjrzyjmy się na poniższy przykład:
#include <iostream>
using namespace std;
int main()
{
int age = 18;
if (age < 20)
{
cout << "masz mniej niz 20 lat" << endl;
}
else
{
cout << "masz 20 lub wiecej lat" << endl;
}
}
Powyższy kod wypisze “masz mniej niż 20 lat”, ponieważ zmienna age ma przypisaną wartość 18. W ramach instrukcji warunkowej if możemy kolejne wywołania if deklarować bezpośrednio po else:
#include <iostream>
using namespace std;
int main()
{
int age = 20;
if (age < 20)
{
cout << "masz mniej niz 20 lat" << endl;
}
else if(age == 20)
{
cout << "masz 20 lat" << endl;
}
else
{
cout << "masz 20 lub wiecej lat" << endl;
}
}
W tym przypadku prawdziwy jest środkowy warunek, czyli “age == 20”, więc do konsoli zostanie wpisany tekst “masz 20 lat”. W C/C++ używana jest jeszcze jedna konstrukcja warunkowa a mianowicie switch. Podstawowa jej budowa wygląda w następujący sposób:
switch (input)
{
case elem1:
// kod wykona się , jeżeli element input jest równy elem1
break;
case elem 2:
// kod wykona się, jeżeli element input jest równy elem2
break;
default:
// kod wykona się, jeżeli element input nie
//został dopasowany z żadnym elementem powyżej
break;
}
Popatrzmy na kolejny przykład:
#include <iostream>
using namespace std;
int main()
{
int item_count = 2;
switch (item_count)
{
case 0:
cout << "Nie masz zadnych przedmiotow" << endl;
break;
case 1:
cout << "Masz 1 przedmiot" << endl;
break;
case 2:
cout << "Masz 2 przedmioty" << endl;
break;
default:
cout << "Masz więcej niż 2 przedmioty" << endl;
break;
}
}
W tym przypadku na konsole zostanie wypisany tekst “Masz 2 przedmioty”, ponieważ zmienna item_count ma wpisaną wartość 2. Spróbuj sam zmienić wartość zmiennej item_count, aby zobaczyć różnice kiedy będzie posiadała wartość 0, 1, oraz 3 i więcej. Konstrukcja switch jest jednak najczęściej wykorzystywana z typem wyliczeniowym, czyli “enum”. Enum tak w największym uproszczeniu pozwala na nazwanie nam liczb, które mają znaczenie w naszej logice. Typ enum konstruujemy w następujący sposób:
enum NazwaTypu
{
Opcja1,
Opcja2,
Opcja3
};
Przykładem niech będzie wypisanie typu broni w grze:
#include <iostream>
using namespace std;
enum WeaponType
{
MELLE,
RANGE,
THROW
};
int main()
{
WeaponType type = WeaponType::RANGE;
switch (type)
{
case WeaponType::MELLE :
cout << "Bron do walki w zwarciu" << endl;
break;
case WeaponType::RANGE:
cout << "Bron do walki zasiegowej" << endl;
break;
case WeaponType::THROW:
cout << "Bron rzucana" << endl;
break;
}
}
W dużej grze taki kod oczywiście nie miałby racji bytu, ale dla unaocznienia jak działa typ wyliczeniowy nadaje się jak najbardziej. W tym poście to byłoby na tyle do zobaczenia w kolejnej części kursu C/C++