• Sábado 14 de Diciembre de 2024, 08:44

Autor Tema:  Validar Numeros  (Leído 1408 veces)

-.-JP

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Validar Numeros
« en: Miércoles 13 de Octubre de 2010, 10:49 »
0
buenas =)
podrai alguien ayduarme, tengo un programa que realiza calculos, y ocupo que el usuario solo digite numeros, letras se me cae el programa -.-. Como valido que solo digite numeros de tipo double??? les dejo parte del codigo:

:hitcomp: case '1':
{
system("cls");
system("color f5");
double xp;
double yp;
cout<<endl<<endl;
cout<<" PUNTO"<<endl;
cout<<" _____"<<endl;
cout<<endl<<endl<<endl;
cout<<"Digite (x,y) para crear Punto: "<<endl;
cout<<endl;
cout<<"X: ";
cin>>xp;
cout<<endl;
cout<<"Y: ";
cin>>yp;
menuPunto(xp,yp);
break;

}

alb

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: Validar Numeros
« Respuesta #1 en: Domingo 17 de Octubre de 2010, 10:02 »
0
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 :
Código: C++
  1. #include <iostream>
  2. #include <limits>
  3.  
  4. bool entrar_doble(double &d_)
  5. {
  6.     std::cin>>d_;
  7.     if(std::cin.eof())
  8.     {
  9.         // 'Ctrl+Z' - se cierra el stream
  10.         std::cin.clear(); // borrar el flag de error
  11.         return false;
  12.     }
  13.     else if(std::cin.fail())
  14.     {
  15.         std::cin.clear(); // borrar el flag de error
  16.         std::cin.ignore( std::numeric_limits<std::streamsize>::max(), 'n' );
  17.         // ir hasta el fin de la linea entrada por el utilisador
  18.  
  19.         return false;
  20.     }
  21.  
  22.     return true;
  23. }
  24.  
  25. int main()
  26. {
  27.     double X;
  28.     std::cout << "X: " ;
  29.     while(!entrar_doble(X))
  30.     {
  31.         std::cout<<"X debe que ser un doble !n";
  32.     }
  33.  
  34.     std::cout<<"nn"<<X<<"n";
  35.     return 0; // succès
  36. }
  37.  
  38.