#include #include #include // for FLT_MAX using namespace std; class ErrorStuff { public: static const int BadInt; static const float BadFloat; static const char BadChar; ErrorStuff(int arg) : x(arg), y(BadFloat), z(BadChar) { } ErrorStuff(float arg) : x(BadInt), y(arg), z(BadChar) { } ErrorStuff(char arg) : x(BadInt), y(BadFloat), z(arg) { } int get_x() const { return x; } float get_y() const { return y; } char get_z() const { return z; } private: int x; float y; char z; }; const int ErrorStuff::BadInt = 0xffffffff; const float ErrorStuff::BadFloat = FLT_MAX; const char ErrorStuff::BadChar = 0; int main() { int i; float f; char c; try { cout << "Enter an even int, a positive float, and a alphabetic char => "; cin >> i >> f >> c; if (cin.fail()) throw string { "cin" }; if (i % 2) throw ErrorStuff(i); else if (f < 0) throw ErrorStuff(f); else if (!isalpha(c)) throw ErrorStuff(c); else cout << "Thanks\n"; } catch (const string& what) { if (what == "cin") { cerr << "*** Can't you type?\n"; cin.clear(); } else { cout << "whatever\n"; } } catch (const ErrorStuff& e) { cout << "Hey!!! "; if (e.get_x() != ErrorStuff::BadInt) cerr << "You entered an invalid int: " << e.get_x() << endl; else if (e.get_y() != ErrorStuff::BadFloat) cerr << "You entered an invalid float: " << e.get_y() << endl; else cerr << "You entered an invalid char: " << e.get_z() << endl; } cout << "*** End of Program ***\n"; }