Código
#include <iostream> #include <stdexcept> #include <stdlib.h> #include <limits> #include <ios> using namespace std; int read_int(const string &Cad, const int &Min, const int &Max) { int x; while (true) { try { cout << Cad; cin >> x; } catch (ios::failure &ex) { cout << "Error en la cadena de numeros, intenta de nuevo.\n"; cin.clear(); cin.ignore(numeric_limits<int>::max(),'\n'); } try { if(x<Min||x>Max) { throw out_of_range(""); } return x; } catch (out_of_range &ex) { cout << "Error en el intervalo, intenta de nuevo.\n"; cin.clear(); cin.ignore(numeric_limits<int>::max(),'\n'); } } } main () { cout << read_int("Ingresa un numero entre 4 y 10: ", 4, 10); }
He modificado el código, ya me lanza correctamente las excepciones, pero aún me queda la duda si es lo correcto.
Código
#include <iostream> #include <stdexcept> #include <stdlib.h> #include <limits> #include <ios> using namespace std; int read_int(const string &Cad, const int &Min, const int &Max) { cin.exceptions(ios::failbit); int x; while (true) { try { cout << Cad; cin >> x; if(x<Min||x>Max) { throw out_of_range(""); } return x; } catch (out_of_range &ex) { cout << "Error en el intervalo, intenta de nuevo.\n"; cin.clear(); cin.ignore(numeric_limits<int>::max(),'\n'); }catch (ios::failure &ex) { cerr << "Error en la cadena de numeros, intenta de nuevo.\n"; cin.clear(); cin.ignore(numeric_limits<int>::max(),'\n'); } } } main () { cout << read_int("Ingresa un numero entre 4 y 10: ", 4, 10); }