es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Manejo de excepciones: atascado en un bucle infinito si se introduce un carácter.

Tengo un problema con mi manejo de excepciones. Parece funcionar con entradas negativas, pero cada vez que intento ingresar un carácter, se queda atrapado en un ciclo infinito en el primer bloque try/catch.

Intenté clear() e ignore() para cin, pero aún no funcionó. Intenté usar una declaración if diferente para la entrada, como (if ((ft >100)) || (in >100)), y la excepción se lanza correctamente.

¿Me estoy perdiendo algo?

“`c++

#include <iostream>

using namespace std;

class convertir
{
private:
int pies;
int pulgadas;
public:
convertir() = default;
double calculo(int ft, int in)
{
double cm = 0;

<pre><code>cm = ((ft * 30.48) + (in * 2.54));

return cm;
</code></pre>

}

};

class numeroNegativo
{};

class entradaInvalida
{};

int main()
{
int ft;
int in;
double cm = 0;
convertir h;
while (true)
{
try
{
cout << "Por favor, ingrese su altura en formato (ft, in)" << endl;
cin >> ft;
cin >> in;

<pre><code> if ((ft < 0) || (in < 0))
{
throw numeroNegativo();
}
if (cin.fail())
{
throw entradaInvalida();
}
cm = h.calculo(ft, in);
cout << "Su altura en cm es: " << cm << endl;
break;
}
catch (numeroNegativo)
{
cout << "Ingresó números negativos. Intente de nuevo" << endl;
system("pause");
}
catch (entradaInvalida)
{
cout << "Ingresó un carácter. Intente de nuevo" << endl;
system("pause");
}
</code></pre>

}
return 0;

}
“`

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que falta un cin.clear() y un cin.ignore() después de la instrucción if (cin.fail()). Esto limpiará la bandera de error y permitirá que el programa continúe.

    También deberías agregar un cin.clear() y un cin.ignore() después de la instrucción if ((ft < 0) || (in < 0)), ya que esto limpiará el búfer de entrada y permitirá que el programa continúe.

Comments are closed.