пользовательская обработка исключений, которая выдает исключение и завершает программу напрямую - PullRequest
0 голосов
/ 31 января 2019

Ниже приведен код.Что я хочу, так это то, что если условие для throw совпадает (здесь это деление на ноль), программа должна сразу завершиться после того, как я получу искомое исключение (здесь это «знаменатель ноль!»).Обычно это можно сделать, просто написав оператор throw (без записи оператора catch), но его завершение вызывает беспокойство, поскольку в среде IDE (в моем случае eclipse) отображается всплывающее окно с сообщением о том, что «program_name.exe перестал работать» в окнеПК.Есть ли лучший способ завершить программу после выдачи исключения, которое должно появиться в самом окне вывода без этих необычно выглядящих всплывающих окон?(может быть лучше формат пользовательских исключений)

#include <iostream>
#include <string>

using namespace std;

double div(double num, double denom)
{
    double result = 0.0;

    try
    {
        if(denom == 0)
        throw "denominator zero!\n";

        result = num/denom;

    }

    catch(const char* e)
    {
        cout<<e<<endl;
    }

    return result;
}




int main()
{
    double a = 5.0;
    double b = 0.0;

    cout<<div(a,b);


    return 0;
}

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Способ сделать это - написать try ... catch блок в основном .

int main() {
    double a = 5.0;
    double b = 0.0;
    try {
        std::cout << div(a,b);
    } catch(const char*msg) {
        std::cout << msg << '\n';
        return EXIT_FAILURE;
    }
    return 0;
}

Теперь, в функции div, не используйте try ... catch,Просто брось исключение.

0 голосов
/ 31 января 2019

из строки ошибки в std :: cerr, тогда

exit(0);

должна выполнить эту работу.Потому что обычно IDE делают такие предупреждения, если код возврата отличается от нуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...