Ver Mensaje Individual
  #3 (permalink)  
Antiguo 04/11/2015, 20:20
RGT
Usuario no validado
 
Fecha de Ingreso: noviembre-2008
Mensajes: 505
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: Validar solo números en un INT

Cita:
Iniciado por xKuZz Ver Mensaje
Aunque devolver 0 o 1 es correcto, es, al menos en mi opinión más apropiado utilizar el tipo bool que el lenguaje nos ofrece. Dicho tipo bool puede tomar dos valores: true (si es verdadero) o false (si es falso).

Vamos a tu código el error es muy simple.

Código C++:
Ver original
  1. int NumeroLetras;
  2. cin >> NumeroLetras; // Esto implica que el número que introduzca ya sea 5, 20 o 40000 se almacena en NumeroLetras
  3.  
  4. ....
  5.  
  6. bool ValidarNumeroIngresado(int NumeroLetras){
  7.    if (NumeroLetras < 48 || NumeroLetras >57)
  8.       return false;
  9.    else
  10.       return true; // Devuelvo verdadero si el int esta en el rango [49,57]

Tu código devolverá verdadero sin introduzco por pantalla enteros del 49 al 57 ambos inclusive, que obviamente no es lo que quieres.

¿Cómo puedes solucionarlo? Hay mil y una forma de hacerlos pero vamos a centrarnos en la más simple para este pequeño trozo de código.

cin tiene asociados unos bits de estado que se activan bajo ciertas circunstancias. Vamos a ir a una circunstancia que provocaría dicho comportamiento. Si yo ejecutase tu programa y e introduzco alguna cosa que no es un entero el bit de fail se activa. Para comprobar que si dicho bit está activado está el método cin.fail().

Nota: Tanto fail() como otros tres bits de estado son comunes para todo flujo, ya sea cin/cout o un archivo fstream.

Además por la naturaleza de tu ejemplo, podemos estar seguros de que quieres un valor estrictamente mayor que 0 y menor o igual que el tamaño de la mayor palabra. Así pues una posible solución al problema encontrado sería:

Código C++:
Ver original
  1. const int kMAXTAM=10 // Supongo que la palabra más grande que puedo usar tiene 10 letras
  2. int NumeroLetras;
  3. cin >> NumeroLetras;
  4. if(cin.fail() || NumeroLetras<=0 || NumeroLetras>kMAXTAM){
  5.    // Lo que se hace cuando no es correcto
  6. }
  7. else {
  8.   // Lo que se hace cuando es correcto
  9. }
Excelente explicacion hermano pero no entendi lo de kMAXTAM=10, fue lo unico.,....