#include <cmath> // for sqrt() function
#include <iostream>
using namespace std;
// A modular square root function
double MySqrt(double dX)
{
// If the user entered a negative number, this is an error condition
if (dX < 0.0)
throw "Can not take sqrt of negative number"; // throw exception of type char*
return sqrt(dX);
}
int main()
{
cout << "Enter a number: ";
double dX;
cin >> dX;
try // Look for exceptions that occur within try block and route to attached catch block(s)
{
cout << "The sqrt of " << dX << " is " << MySqrt(dX) << endl;
}
catch (const char* strException) // catch exceptions of type char*
{
cerr << "Error: " << strException << endl;
}
}
I2luY2x1ZGUgPGNtYXRoPiAvLyBmb3Igc3FydCgpIGZ1bmN0aW9uCiNpbmNsdWRlIDxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIEEgbW9kdWxhciBzcXVhcmUgcm9vdCBmdW5jdGlvbgpkb3VibGUgTXlTcXJ0KGRvdWJsZSBkWCkKewogICAgLy8gSWYgdGhlIHVzZXIgZW50ZXJlZCBhIG5lZ2F0aXZlIG51bWJlciwgdGhpcyBpcyBhbiBlcnJvciBjb25kaXRpb24KICAgIGlmIChkWCA8IDAuMCkKICAgICAgICB0aHJvdyAiQ2FuIG5vdCB0YWtlIHNxcnQgb2YgbmVnYXRpdmUgbnVtYmVyIjsgLy8gdGhyb3cgZXhjZXB0aW9uIG9mIHR5cGUgY2hhcioKCiAgICByZXR1cm4gc3FydChkWCk7Cn0KCmludCBtYWluKCkKewogICAgY291dCA8PCAiRW50ZXIgYSBudW1iZXI6ICI7CiAgICBkb3VibGUgZFg7CiAgICBjaW4gPj4gZFg7CgogICAgdHJ5IC8vIExvb2sgZm9yIGV4Y2VwdGlvbnMgdGhhdCBvY2N1ciB3aXRoaW4gdHJ5IGJsb2NrIGFuZCByb3V0ZSB0byBhdHRhY2hlZCBjYXRjaCBibG9jayhzKQogICAgewogICAgICAgIGNvdXQgPDwgIlRoZSBzcXJ0IG9mICIgPDwgZFggPDwgIiBpcyAiIDw8IE15U3FydChkWCkgPDwgZW5kbDsKICAgIH0KICAgIGNhdGNoIChjb25zdCBjaGFyKiBzdHJFeGNlcHRpb24pIC8vIGNhdGNoIGV4Y2VwdGlvbnMgb2YgdHlwZSBjaGFyKgogICAgewogICAgICAgIGNlcnIgPDwgIkVycm9yOiAiIDw8IHN0ckV4Y2VwdGlvbiA8PCBlbmRsOwogICAgfQp9