Me podrían ayudar, hice un programa que me da la raíz cuadrada de un número y me suelta una excepción cuando pongo un número negativo, el problema es que no se como hacer que el programa solo me dé la excepción cuando digite un número negativo y no me haga la operación, y también que el programa se detenga cuando digite el 0.
#include<iostream>
#include<cmath>
using namespace std;
class Raiz{
public:
double a, b;
Raiz(double a);
void mostrar_raiz();
};
Raiz::Raiz(double a){
try{
if(a<0)
throw"Debes de colocar un numero positivo";
this->a=a;
this->b=sqrt(a);
}
catch(const char* exp){
cout<<exp<<endl;
}
}
void Raiz::mostrar_raiz(){
cout<<"La raiz cuadrada de "<<a<<" es: "<<b;
}
int main(){
cout<<"Programa que saca raiz cuadrada"<<endl<<endl;
Raiz r(4);
r.mostrar_raiz();
return 0;
}
Hola @Genesis_4
Usa Código GeShi (esto tiene que ver con la publicación en sí), para que la lectura de tu código en el foro sea amena.
Citar...también que el programa se detenga cuando digite el 0
Debes cambiar
if (a < 0) (si el contenido que hace referencia la variable
a es menor que 0) por
if (a <= 0) (si el contenido que hace referencia la variable
a es menor o igual a 0).
El problema es que estás lanzando la excepción y atajándola dentro del mismo
Raiz y luego imprimiéndola, por lo tanto nunca impides que se llame al método
mostrar_raiz(). Debes atajarla en la misma función
main(), por ejemplo, y luego sailr.
#include<iostream>
#include<cmath>
using namespace std;
class Raiz {
public:
double a, b;
Raiz(double a);
void mostrar_raiz();
};
Raiz::Raiz(double a)
{
if (a <= 0)
throw "Debes de colocar un numero positivo";
this->a=a;
this->b=sqrt(a);
}
void Raiz::mostrar_raiz()
{
cout << "La raiz cuadrada de "<< a << " es: " << b << endl;
}
int main()
{
cout<<"Programa que saca raiz cuadrada"<<endl<<endl;
try {
Raiz r(1);
r.mostrar_raiz();
} catch (const char *exp) {
cout << exp << endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
~ DtxdF
Muchas gracias.