Witajcie! Potrzebuję pomocy odnośnie obsługi błędów w C++. W założeniach ten program ma wczytywać jakąś liczbę i pisać "Wszystko OK" jeżeli się to powiedzie. Jeśli się nie powiedzie, wypisuje "Błąd: ", a następnie wartość która jest błędna (tak wiem, że powinien też wypisywać jaka zmienna jest zła, bla bla bla, ale tutaj akurat chodzi mi tylko o to, że nie mogę tego wczytać...). My chcemy, żeby wartości były niepoprawne, ponieważ musimy przetestować obsługę błędów :P. Problem polega na tym, że gdy program znajdzie błąd '(!cin)' ładnie daje to runtime_error'a. Niestety, nie może przekazać tego, co wpisaliśmy do strumienia do zmiennej, żeby to potem wyświetlić (albo tak się dzieje, a ja używam po prostu źle jakiś funkcji :S). Mój kod wygląda tak:
#include <std_lib_facilities.h>
#include <conio.h>
void error(string s1)
{
throw runtime_error(s1);
}
int main()
try{
system("chcp 1250");
cout << ":> ";
string s1;
double d = 0;
cin >> d;
if (!cin)
{
istream& get (string& s1); error(s1);
}
else cout << "Wszystko OK!";
_getch();
return 0;
}
catch (runtime_error& e)
{
cerr << "Błąd: " << e.what();
_getch();
return 1;
}
catch (...)
{
cerr << "Niespodziewany błąd!";
_getch();
return 2;
}
PS: std_lib_facilities.h to jest plik nagłówkowy, który zawiera w sobie większość "standardowych" (takich jak chociażby wszystkie stream'y) plików nagłówkowych.
EDIT: Nie działa wczytywanie strumienia do zmiennej. Byłem idiotą, że nie sprawdziłem od razu co zawiodło. Sory :P
EDIT2: Co nie znaczy, że wiem, jak dać cin'a do zmiennej (w tym przypadku).