#include <iostream>
//Parametry funkcji zostają przekazane przez wartość
bool GetUserInput(std::string msg,std::string err_msg, std::string option_1, std::string option_2){
//Wybierz
std::cout << msg << " options : [" << option_1 << ',' << option_2 << "]\n";
//tzw nieskończony while, będzie powtarzać się
while(true){
//Zmienna lokalna na wejście użytkownika
std::string user_input="";
//Pobierz wejście od użytkownika
std::cin >> user_input;
//Pierwsza opcja
//Podczas porównywania wykorzystywane jest przeciązenie operatora == dla std::string
if(user_input == option_1){
//Return wychodzi z funkcji i zwraca odp. wartość.
return true;
}//Lub jeśli druga opcja
else if(user_input == option_2){
return false;
}//Wszystko inne
else
{
//Wypisz wiadomość o błędzie
std::cout << err_msg << '\n';
}
}
//Nigdy nie zostanie osiągnięty
return false;
}
int main()
{
//Wypisujemy powitalną wiadomość
std::cout << "Czesc kolego!\n";
//Używamy tej samej wiadomości o błędzie w obu przypadkach, może zostać zadeklarowana jako stała.
const std::string error_msg = "Podano zla wartosc, podaj ponownie!";
//Sprawdzanie wejścia użytkownika wyrzucone do zewnętrznej funkcji
bool coffee_tea = GetUserInput("Kawa czy herbata?", error_msg, "kawa", "herbata");
//Używamy wartości zwróconej z funkcji do zainicjalizowania zmiennej lokalnej.
bool cookie = GetUserInput("Czy chcesz jeszcze ciastko?", error_msg, "tak", "nie");
//Operator ternarny sprawdza warunek (w tym przypadku jest to zmienna logiczna) i zwraca jedną z 2 wartości(muszą być tego samego typu).
//W tym przypadku wynikiem operatora ternarnego jest stała w postaci cioągu znaków.
//Warto zwrócić uwagę na nawiasy, wynikiem wyrażenia w nawiasach jest jeden z 2 stałych ciągów znaków
std::cout << "Masz " << (coffee_tea ? "kawe" : "herbate") << (cookie ? " i ciastko" : " i to wszystko") << "!\n";
//Wynik dla systemu operacyjnego. 0 oznacza brak błędów w wykonaniu.
return 0;
}
Warto się zastanowić nad problemem. W obu przypadkach wybór ma tylko 2 opcje, do tego dochodzi sprawdzenie czy wejście użytkownika jest poprawne.