Как в C++ реализовать в функции обработку исключений с выводом текста при исключении

Необходимо подсчитать квадратный корень числа, при этом если число отрицательное то нужно бросить исключение. Если было создано исключение, то функция должна вывести текст. Всё это нужно завернуть в одну функцию.

#include <iostream>
#include <cmath>
using namespace std;

double sq(int);

int main() {
     cout<<sq(-1);

return 0;
}

double sq(int a) {
    try {
        if (a < 0)
            throw - 1;
        return sqrt(a);
    }
    catch (int) {
        cout<< "Error";
    }
}

При запуске функции sq с аргументом -1 и попытке вывести её результат вместо "Error" выводится "Error0". Как это исправить, чтобы функция выводила просто "Error"?


Ответы (1 шт):

Автор решения: Mikhailo

Не надо обрабатывать исключение в sq - смысла нет: и без него вы просто можете вернуть "ничто".

Правильная обработка скорее такая:

#include <iostream>
#include <cmath>
using namespace std;

double sq(int);

int main() {
    try {
        cout<<sq(-1);
    catch (int) {
        cout<< "Error";
    }
}

double sq(int a) {
    if (a < 0) throw - 1;
    return sqrt(a);
}

Так вы передаете обработку той функции, котоая может это сделать. В вашем варианте ваш код sq и тот, что ниже, эквавалентны:

double sq(int a) {
    if (a < 0) cout<< "Error";
    else return sqrt(a);
}

С той же ошибкой - отсутствием возвращаемого значения.

→ Ссылка