Ver Mensaje Individual
  #3 (permalink)  
Antiguo 14/04/2015, 00:01
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Diferenciar entrada de datos por consola

También, ya que estás en C++, puedes aprovechar los templates:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <stdexcept>
  3. #include <string>
  4.  
  5.  
  6. template< typename T >
  7. bool Convert( const std::string&, T& )
  8. {
  9.   return false;
  10. }
  11.  
  12. template< >
  13. bool Convert( const std::string& cadena, int& valor )
  14. {
  15.   try
  16.   {
  17.     valor = std::stoi( cadena );
  18.     return true;
  19.   }
  20.  
  21.   catch( const std::invalid_argument& )
  22.   {
  23.     return false;
  24.   }
  25. }
  26.  
  27. template< >
  28. bool Convert( const std::string& cadena, float& valor )
  29. {
  30.   try
  31.   {
  32.     valor = std::stof( cadena );
  33.     return true;
  34.   }
  35.  
  36.   catch( const std::invalid_argument& )
  37.   {
  38.     return false;
  39.   }
  40. }
  41.  
  42. int main( )
  43. {
  44.   std::string cad;
  45.  
  46.   std::cout << "Introduce un número entero: " << std::endl;
  47.   std::cin >> cad;
  48.  
  49.   int entero;
  50.   if( Convert( cad, entero ) )
  51.     std::cout << "El número es: " << entero << std::endl;
  52.   else
  53.     std::cout << "No es un número válido" << std::endl;
  54.  
  55.   std::cout << "Introduce un número decimal: " << std::endl;
  56.   std::cin >> cad;
  57.  
  58.   float decimal;
  59.   if( Convert( cad, decimal ) )
  60.     std::cout << "El número es: " << decimal << std::endl;
  61.   else
  62.     std::cout << "No es un número válido" << std::endl;
  63. }