Mam takie pytanie. Jak napisać w wyjątku taką komendę, żeby spróbowała wykonać jeszcze raz funkcję w której wystąpił?
Przykład: mam sobie funkcje dzielącą:
float dziel(int a, int b){
Podaj a i b
Jeśli b jest równe zero - rzuć wyjątek
W innym wypadku float c = a/b
zwróc c
}
Chciałbym zrobić to tak, żeby w wypadku podania błędnych danych, program poprosił o nie jeszcze raz.
[C++] Wyjątek
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
[C++] Wyjątek
Czemu musisz? Ogólnie wywoływanie jeszcze czegoś "normalnego" w bloku obsługi wyjątku jest bez sensu. Ogólnie funkcja dziel jest bez sensu, bo ona ma dzielić, a nie pobierać dane i dzielić.
Co do rozwiązania, to proponuje takie coś (choć jest to sytuacja bez sensu):
Pozdrawiam.
Co do rozwiązania, to proponuje takie coś (choć jest to sytuacja bez sensu):
Kod: Zaznacz cały
bool done=false;
while(!done)
{
try
{
dziel(a,b);
}
catch(Exc e)
{
cout<<"Blad dzielenia przez 0.";
}
done=true;
}
-
- Użytkownik
- Posty: 535
- Rejestracja: 19 gru 2008, o 15:52
- Płeć: Mężczyzna
- Lokalizacja: Łódź
- Podziękował: 49 razy
- Pomógł: 62 razy
[C++] Wyjątek
Nie no, to dzielenie podałem tylko jako przykład...
Rozumiem, że wyjatek raczej zawsze będzie kończył program, jeśli umieści się na końcu tego programu catch'a? (tak zrobiłem - try pod funkcją main, catch na końcu)
Rozumiem, że wyjatek raczej zawsze będzie kończył program, jeśli umieści się na końcu tego programu catch'a? (tak zrobiłem - try pod funkcją main, catch na końcu)
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
[C++] Wyjątek
Niekoniecznie musi kończyć. Może wykonać jakąś inną czynność, która spróbuje "uratować" program.
Jak robisz coś w stylu:
to rzeczywiście po wystąpieniu wyjątku program skończy swoje działanie.
Pozdrawiam.
Jak robisz coś w stylu:
Kod: Zaznacz cały
int main()
{
try
{
smthg();
}
catch(Exception e)
{
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
Pozdrawiam.