Ver Mensaje Individual
  #7 (permalink)  
Antiguo 05/11/2015, 10:34
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 3 meses
Puntos: 204
Respuesta: Validar solo números en un INT

Venga, yo también quiero :)

Código C++:
Ver original
  1. enum class ConvertError
  2. {
  3.   NoError,
  4.   Overflow,
  5.   WrongFormat
  6. };
  7.  
  8. ConvertError ToInt( std::istream& stream, int& value )
  9. {
  10.   ConvertError toReturn = ConvertError::NoError;
  11.  
  12.   bool negate = false;
  13.   bool firstChar = true;
  14.   value = 0;
  15.   bool nextIteration = true;
  16.   do
  17.   {
  18.     char c = stream.peek();
  19.  
  20.     if( c == EOF )
  21.       nextIteration = false;
  22.     else
  23.     {
  24.       stream.get(); // discard from the stream
  25.  
  26.       if( c==' ' || c=='\n' || c=='\r' || c=='\t' )
  27.         nextIteration = false;
  28.       else if( isdigit(c) )
  29.       {
  30.         int newValue = value*10+c-'0';
  31.         if( newValue < value )
  32.         {
  33.           nextIteration = false;
  34.           toReturn = ConvertError::Overflow;
  35.         }
  36.         value = newValue;
  37.       }
  38.       else
  39.       {
  40.         if( (c != '-' && c != '+') || !firstChar )
  41.         {
  42.           nextIteration = false;
  43.           toReturn = ConvertError::WrongFormat;
  44.         }
  45.         else
  46.           negate = (c=='-');
  47.       }
  48.     }
  49.     firstChar = false;
  50.   } while(nextIteration);
  51.  
  52.   if( negate )
  53.     value *= -1;
  54.  
  55.   return toReturn;
  56. }
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.