Validar solo números en un INT en C++

Iniciado por RGT, 5 Noviembre 2015, 03:27 AM

0 Miembros y 1 Visitante están viendo este tema.

RGT

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..

class_OpenGL

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 (cpp) [Seleccionar]
if(std::cin.fail()) {
   std::cin.clear();
   /*Comunicas que ya has verificado los errores. A partir de esta linea es como si no
   hubieran ocurrido, aunque en un futuro es posible que ocurran mas*/

   std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

   /*Si el parametro vale exactamente std::numeric_limits<std::streamsize>::max(),
   entonces se ignora todo hasta el caracter fin de línea*/
}

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL