Mam taką funkcję:
int x = NULL, y = NULL;
std::string temp;
void mojaFunckja(std::string alert)
{
std::cout << alert << std::endl;
if (NULL == x)
{
std::cout << "Podaj x: ";
try
{
getline(std::cin, temp);
x = std::stoi(temp);
if (x <= 0)
{
x = NULL;
throw std::logic_error("Wartosc musi byc >0");
}
}
catch (std::invalid_argument) {
mojaFunckja("Zla wartosc");
}
catch (std::logic_error e) {
mojaFunckja( e.what() );
}
catch (std::exception e) {
mojaFunckja("Blad: " + static_cast<std::string>(e.what()));
}
catch (...) {
mojaFunckja("Nieznany blad");
}
}
else {
std::cout << "Podaj x: " << x << std::endl;
}
std::cout << "Podaj y: ";
try
{
getline(std::cin, temp);
y = std::stoi(temp);
if (y <= 0)
{
y = NULL;
throw std::logic_error("Wartosc musi byc >0");
}
}
catch (std::invalid_argument) {
mojaFunckja("Zla wartosc");
}
catch (std::logic_error e) {
mojaFunckja(std::string(e.what()));
}
catch (std::exception e) {
mojaFunckja("Blad: " + static_cast<std::string>(e.what()));
}
catch (...) {
mojaFunckja("Nieznany blad!");
}
std::cout << y<<std::endl;
std::cout << x<<std::endl;
}
Chcę aby po wpisaniu błędnej wartości x funkcja się uruchomiła ponownie, a gdy błędna jest wartość y program wyświetlił podaną wartość x ("Podaj x: x") a potem znów poprosił o podanie wartości y. Wszystko dobrze działa dopóki nie poda się złej wartości (np. "abcd" zamiast liczby itd.). Po wpisaniu błędnej wartości program jakby wraca do wyjątku tyle razy ile wystąpił błąd w w trakcie wykonywania funkcji i w efekcie albo 2 ostatnie linijki działają kilka razy albo kod "Podaj wartość y: " wykonuje się kilka razy. Nie wiem dlaczego tak jest i jak to naprawić. Z góry dzięki za pomoc.