[C++] Wyjątek

Mikolaj9
Użytkownik
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

Post autor: Mikolaj9 »

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.
Mruczek
Użytkownik
Użytkownik
Posty: 1114
Rejestracja: 26 paź 2008, o 19:43
Płeć: Mężczyzna
Podziękował: 23 razy
Pomógł: 157 razy

[C++] Wyjątek

Post autor: Mruczek »

Może spróbuj użyć:
do{
}
while(b==0)
Mikolaj9
Użytkownik
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

Post autor: Mikolaj9 »

Właśnie muszę użyć wyjątku, i to jest ten problem.
soku11
Użytkownik
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

Post autor: soku11 »

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):

Kod: Zaznacz cały

bool done=false;
while(!done)
{
  try
  {
    dziel(a,b);
  }
  catch(Exc e)
  {
    cout<<"Blad dzielenia przez 0.";
  }
  done=true;
}
Pozdrawiam.
Mikolaj9
Użytkownik
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

Post autor: Mikolaj9 »

Nie no, to dzielenie podałem tylko jako przykład... :D
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)
soku11
Użytkownik
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

Post autor: soku11 »

Niekoniecznie musi kończyć. Może wykonać jakąś inną czynność, która spróbuje "uratować" program.
Jak robisz coś w stylu:

Kod: Zaznacz cały

int main()
{
  try
  {
    smthg();
  }
  catch(Exception e)
  {
    return EXIT_FAILURE;
  }
  return EXIT_SUCCESS;
}

to rzeczywiście po wystąpieniu wyjątku program skończy swoje działanie.
Pozdrawiam.
ODPOWIEDZ