Hola,
Tienes que comprobar que la lectura se pasa bien, y sino tratar el problema.
Cuando haces
std::cin>>var_, si falla la instruction, std::cin se pone en error y tiene el flag
fail puesto. Ya puedes probar su valor y preguntar por entrar une valor appropuesto.
Seria algo asi :
#include <iostream>
#include <limits>
bool entrar_doble(double &d_)
{
std::cin>>d_;
if(std::cin.eof())
{
// 'Ctrl+Z' - se cierra el stream
std::cin.clear(); // borrar el flag de error
return false;
}
else if(std::cin.fail())
{
std::cin.clear(); // borrar el flag de error
std::cin.ignore( std::numeric_limits<std::streamsize>::max(), 'n' );
// ir hasta el fin de la linea entrada por el utilisador
return false;
}
return true;
}
int main()
{
double X;
std::cout << "X: " ;
while(!entrar_doble(X))
{
std::cout<<"X debe que ser un doble !n";
}
std::cout<<"nn"<<X<<"n";
return 0; // succès
}