# Handling the Divide by Zero Exception in C++

We use Exception Handling to overcome exceptions occurred in execution of a program in a systematic manner.

Dividing a number by Zero is a mathematical error (not defined) and we can use exception handling to gracefully overcome such operations. If you write a code without using exception handling then the output of division by zero will be shown as infinity which cannot be further processed.

Consider the code given below, the Division function returns the result of numerator divided by denominator which is stored in the variable result in the main and then displayed. This Division function does not have any rumination for denominator being zero.

 `// Program to show division without using ` `// Exception Handling ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// Defining function Division ` `float` `Division(``float` `num, ``float` `den) ` `{ ` `    ``// return the result of division ` `    ``return` `(num / den); ` ` `  `} ``// end Division ` ` `  `int` `main() ` `{ ` `    ``// storing 12.5 in numerator ` `    ``// and 0 in denominator ` `    ``float` `numerator = 12.5; ` `    ``float` `denominator = 0; ` `    ``float` `result; ` ` `  `    ``// calls Division function ` `    ``result = Division(numerator, denominator); ` ` `  `    ``// display the value stored in result ` `    ``cout << ``"The quotient of 12.5/0 is "` `         ``<< result << endl; ` ` `  `} ``// end main `

Output:

```The quotient of 12.5/0 is inf
```

We can handle this exception in a number of different ways, some of which are listed below

• 1) Using the runtime_error class

The runtime_error class is a derived class of Standard Library class exception, defined in exception header file for representing runtime errors.
Now we consider the exact same code but included with handling the division by zero possibility. Here, we have the try block inside main that calls the Division function. The Division function checks if the denominator passed is equal to zero if no it returns the quotient, if yes it throws a runtime_error exception. This Exception is caught by the catch block which prints the message “Exception occurred” and then calls the what function with runtime_error object e. The what() function {used in the code given below} is a virtual function of the class Standard exception defined in stdexcept header file, it is used to identify the exception. This prints the message “Math error: Attempted to divide by Zero”, after which the program resumes the ordinary sequence of instructions.

 `// Program to depict how to handle ` `// divide by zero exception ` ` `  `#include ` `#include // To use runtime_error ` `using` `namespace` `std; ` ` `  `// Defining function Division ` `float` `Division(``float` `num, ``float` `den) ` `{ ` `    ``// If denominator is Zero ` `    ``// throw runtime_error ` `    ``if` `(den == 0) { ` `        ``throw` `runtime_error(``"Math error: Attempted to divide by Zero\n"``); ` `    ``} ` ` `  `    ``// Otherwise return the result of division ` `    ``return` `(num / den); ` ` `  `} ``// end Division ` ` `  `int` `main() ` `{ ` `    ``float` `numerator, denominator, result; ` `    ``numerator = 12.5; ` `    ``denominator = 0; ` ` `  `    ``// try block calls the Division function ` `    ``try` `{ ` `        ``result = Division(numerator, denominator); ` ` `  `        ``// this will not print in this example ` `        ``cout << ``"The quotient is "` `             ``<< result << endl; ` `    ``} ` ` `  `    ``// catch block catches exception thrown ` `    ``// by the Division function ` `    ``catch` `(runtime_error& e) { ` ` `  `        ``// prints that exception has occurred ` `        ``// calls the what function ` `        ``// using runtime_error object ` `        ``cout << ``"Exception occurred"` `<< endl ` `             ``<< e.what(); ` `    ``} ` ` `  `} ``// end main `

Output:

```Exception occurred
Math error: Attempted to divide by Zero
```
• 2) Using User defined exception handling

Here we define a class Exception that publicly inherits from runtime_error class. Inside the class Exception, we define only a constructor that will display the message “Math error: Attempted to divide by Zero” when called using the class object. We define the Division function that calls the constructor of class Exception when denominator is zero otherwise returns the quotient. Inside of main we give some values to numerator and denominator, 12.5 and 0 respectively. Then we come to the try block that calls the Division function which will either return the quotient or throw an exception. The catch block catches the exception of type Exception, displays the message “Exception occurred” and then calls the what function. After the exception is handled the program resumes.

 `// Program to depict user defined exception handling ` ` `  `#include ` `#include ` `// For using runtime_error ` ` `  `using` `namespace` `std; ` ` `  `// User defined class for handling exception ` `// Class Exception publicly inherits ` `// the runtime_error class ` ` `  `class` `Exception : ``public` `runtime_error { ` `public``: ` `    ``// Defining constructor of class Exception ` `    ``// that passes a string message to the runtime_error class ` `    ``Exception() ` `        ``: runtime_error(``"Math error: Attempted to divide by Zero\n"``) ` `    ``{ ` `    ``} ` `}; ` ` `  `// defining Division function ` `float` `Division(``float` `num, ``float` `den) ` `{ ` ` `  `    ``// If denominator is Zero ` `    ``// throw user defined exception of type Exception ` `    ``if` `(den == 0) ` `        ``throw` `Exception(); ` ` `  `    ``// otherwise return the result of division ` `    ``return` `(num / den); ` ` `  `} ``// end Division ` ` `  `int` `main() ` `{ ` `    ``float` `numerator, denominator, result; ` `    ``numerator = 12.5; ` `    ``denominator = 0; ` ` `  `    ``// try block calls the Division function ` `    ``try` `{ ` `        ``result = Division(numerator, denominator); ` ` `  `        ``// this will not print in this example ` `        ``cout << ``"The quotient is "` `<< result << endl; ` `    ``} ` ` `  `    ``// catch block catches exception if any ` `    ``// of type Exception ` `    ``catch` `(Exception& e) { ` ` `  `        ``// prints that exception has occurred ` `        ``// calls the what function using object of ` `        ``// the user defined class called Exception ` `        ``cout << ``"Exception occurred"` `<< endl ` `             ``<< e.what(); ` `    ``} ` ` `  `} ``// end main `

Output:

```Exception occurred
Math error: Attempted to divide by Zero
```
• 3) Using Stack Unwinding

In stack unwinding we have the main inside which the try block calls the Division function which in turn calls the CheckDenominator function. The CheckDenominator function checks if denominator is zero, if true throws an exception otherwise returns the value of denominator. The Division function calculates the value of quotient {if non-zero value of denominator was passed} and returns the same to the main. The catch block catches any exception thrown and displays the message “Exception occurred” and calls the what function which prints “Math error: Attempted to divide by zero”. After this the program resumes.

 `// Program to depict Exception Handling ` `// Using stack unwinding ` ` `  `#include ` `#include ` `using` `namespace` `std; ` ` `  `// defining the CheckDenominator function ` `float` `CheckDenominator(``float` `den) ` `{ ` ` `  `    ``// if denominator is zero ` `    ``// throw exception ` `    ``if` `(den == 0) { ` `        ``throw` `runtime_error(``"Math error: Attempted to divide by zero\n"``); ` `    ``} ` `    ``else` `        ``return` `den; ` `} ``// end CheckDenominator ` ` `  `// defining Division function ` `float` `Division(``float` `num, ``float` `den) ` `{ ` `    ``// Division function calls CheckDenominator ` `    ``return` `(num / CheckDenominator(den)); ` ` `  `} ``// end Division ` ` `  `int` `main() ` `{ ` `    ``float` `numerator, denominator, result; ` `    ``numerator = 12.5; ` `    ``denominator = 0; ` ` `  `    ``// try block calls the Division function ` `    ``try` `{ ` `        ``result = Division(numerator, denominator); ` ` `  `        ``// This will not print in this example ` `        ``cout << ``"The quotient is "` `             ``<< result << endl; ` `    ``} ` ` `  `    ``// catch block catches exception if any ` `    ``catch` `(runtime_error& e) { ` ` `  `        ``// prints that exception has occurred ` `        ``// calls the what function using object of ` `        ``// runtime_error class ` `        ``cout << ``"Exception occurred"` `<< endl ` `             ``<< e.what(); ` `    ``} ` `} ``// end main `

Output:

```Exception occurred
Math error: Attempted to divide by zero
```
• 4) Using try and catch(…)

In this code the try block calls the CheckDenominator function. In CheckDenominator function we check if denominator is zero, if true throw an exception by passing a string “Error”. This string is caught by the catch block and therefore prints the message “Exception occurred”. The catch block here is capable of catching exception of any type.

 `// Program to depict use of try catch block ` ` `  `#include ` `#include ` `using` `namespace` `std; ` ` `  `// defining CheckDenominator ` `float` `CheckDenominator(``float` `den) ` `{ ` `    ``if` `(den == 0) ` `        ``throw` `"Error"``; ` `    ``else` `        ``return` `den; ` `} ``// end CheckDenominator ` ` `  `int` `main() ` `{ ` `    ``float` `numerator, denominator, result; ` `    ``numerator = 12.5; ` `    ``denominator = 0; ` ` `  `    ``// try block ` `    ``try` `{ ` ` `  `        ``// calls the CheckDenominator function ` `        ``// by passing a string "Error" ` `        ``if` `(CheckDenominator(denominator)) { ` ` `  `            ``result = (numerator / denominator); ` `            ``cout << ``"The quotient is "` `                 ``<< result << endl; ` `        ``} ` `    ``} ` ` `  `    ``// catch block ` `    ``// capable of catching any type of exception ` `    ``catch` `(...) { ` ` `  `        ``// Display a that exception has occurred ` `        ``cout << ``"Exception occurred"` `<< endl; ` `    ``} ` ` `  `} ``// end main `

Output:

```Exception occurred
```

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :

2

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.