ВД
Владимир Дроков

c++, try/catch/throw

Пытаюсь разобраться с исключениями. Почему выдает черный экран вместо сообщения: ""Деление на 0 невозможно"?

#include

using namespace std;

int main()
{
int a=4;
int b=0;
int s;

try { s=a/b; cout << s << endl;}
catch (int s) {cout << "Деление на 0 невозможно" << endl;}
}

Айгерим
Айгерим

Деление на 0 — это undefined behavior, а не исключительная ситуация. Его нельзя обработать, его можно только предотвратить.
Поэтому лучше всего, проверить if-ом что у вас хранится в b:
if (0 == b) throw std::domain_error("Деление на 0 невозможно");

Что касается исключений:
После блока try можно писать несколько блоков catch.
В catch в скруглых скобках пишется тип возникающей ошибки. Компилятор ищет первый подходящий catch и выполняет код описаный в этом блоке.
если указать в блоке catch в круглых скобках троеточие:
catch (...) {cout << "Деление на 0 невозможно" << endl;}
то получими "обобщающий" catch. Выполняется, при возникновении любой ошибки. Если ранее не был описан подходящий для данной ситуации catch.

Похожие вопросы
Возник вопрос с исключениями в c++ try catch throw
C/C++ -помогите написать программу на C++
что за стрелки возникают после расставления маркеров в 123d catch?
Pascal(ABC) -> C++ или C# -> C++ ?
что лучше C# или C++
try catch(исключения ошибок ) си шарп. как она исключает, ошибку объясните...
Программа в C или C++
С++ Функция CopyFile() как обработать исключения? какой параметр передать в catch(???)
C(не C++ или C#, а именно С) секундомер
C/C++