Validar sólo ingreso de números en C++

publicado por: Anonymous

Necesito que sólo me acepte números y no letras.

¿Cómo se puede hacer esa validación? ¿Cómo hacer una función esDigito?

#include <stdlib.h>     /* atoi*/
#include<iostream>
using namespace std;
double ConvierteANumero(char valor[3])
{   int n;
    n = atoi(valor); 
    return n; 
}
int main ()
{
    char valor[3];
    int n,m=10;
    cout<< ("Ingrese edad: ");
    cin>>valor;
    n=ConvierteANumero(valor);
    m=m+n;
    cout<< "Edad antigua:"<<n<<"nEdad nueva  :"<<m;
  return 0;
}

solución

En C++ dispones del método isdigit para verificar si un caracter determinado es un número o no:

#include <cctype>

std::cout << std::isdigit('f'); // 0
std::cout << std::isdigit('5'); // 1

Con esta función, implementar una verificación es trivial:

bool EsUnNumero(const char* cadena)
{
  for( ; *cadena; ++cadena )
  {
    // En cuanto un caracter no sea numérico
    if( !std::isdigit(*cadena) )
      return false;
  }

  return true;
}

Claro que también puedes optar por hacer el chequeo a mano. Básicamente se trata de verificar que cada caracter que compone el número se encuentra entre el caracter ‘0’ y el caracter ‘9’. Si echas un vistazo a una tabla ASCII verás que el caracter ‘0’ está en un índice menor que el caracter ‘9’, luego un carácter será numérico si su valor es mayor o igual a ‘0’ y menor o igual a ‘9’.

Como de lo que se trata es de verificar si una secuencia es numérica o no podemos simplificar el argumento diciendo que una secuencia no será numérica si al menos un carácter no es numérico o, dicho con código:

bool EsUnNumero(const char* cadena)
{
  for( ; *cadena; ++cadena )
  {
    // En cuanto un caracter no sea numérico
    if( '0' > *cadena || '9' < *cadena )
      return false;
  }

  return true;
}

Un saludo.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *