elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Validar solo números en un INT en C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Validar solo números en un INT en C++  (Leído 5,175 veces)
RGT

Desconectado Desconectado

Mensajes: 33



Ver Perfil
Validar solo números en un INT en C++
« en: 5 Noviembre 2015, 03:27 am »

Código:
int NumeroLetras;

do
    {
        cout << "\nN\243mero de letras de la palabra: ";
        cin >> NumeroLetras;
    } while(ValidarNumeroIngresado(NumeroLetras));

/*  Validar el número ingresado
------------------------------------------------------------------------*/
int ValidarNumeroIngresado(int NumeroLetras)
{
    if (NumeroLetras < 48 || NumeroLetras > 57)
        return 0;

    else
        return 1;
}

Hola, me deje llevar por la tabla del codigo ASCHII, si se ingresa algo fuera de ese rango, no es considerado un número, pero no funciona.

Alguien sabe mi error?.
Investigué en Google y encuentro muchas formas diferentes, pero para serles sincero no las entiendo.

Espero puedan ayudarme chicos..


En línea

class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: Validar solo números en un INT en C++
« Respuesta #1 en: 5 Noviembre 2015, 12:31 pm »

Cuando haces esto 'cin >> NumeroLetras;', siendo NumeroLetras un entero, directamente se guarda como un entero, es decir, ya es un número (no necesitas comprobar nada). Lo que tendrías que comprobar es si a la hora de introducir el número, se ha introducido correctamente. Eso se puede hacer (después de 'cin >> NumeroLetras;') viendo si std::cin.fail() retorna true o false. Si retorna true, entonces el número introducido no era correcto (se han introducido decimales, o caracteres, o el número es demasiado grande o pequeño). Si retorna false, eso significa que no ha habido ningún error.

NOTA: Si ha habido un error, tienes que limpiar el buffer que maneja std::cin. Esto lo puedes hacer así:

Código
  1. if(std::cin.fail()) {
  2.    std::cin.clear();
  3.    /*Comunicas que ya has verificado los errores. A partir de esta linea es como si no
  4.     hubieran ocurrido, aunque en un futuro es posible que ocurran mas*/
  5.  
  6.    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  7.  
  8.    /*Si el parametro vale exactamente std::numeric_limits<std::streamsize>::max(),
  9.     entonces se ignora todo hasta el caracter fin de línea*/
  10. }


En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines