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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  isdigit(); problema con validacion de caracteres
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: isdigit(); problema con validacion de caracteres  (Leído 4,436 veces)
Netzari Limas

Desconectado Desconectado

Mensajes: 2


Ver Perfil
isdigit(); problema con validacion de caracteres
« en: 25 Marzo 2015, 07:18 am »

Buenas, soy nuevo en este foro y quisiera saber si me pueden ayudar con mi codigo..

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <math.h>
  4. using namespace std;
  5. int numeros[10];
  6.  
  7. int i,n;
  8. int j;
  9. int main(int argc, char *argv[])
  10. {
  11.  
  12.    char desea;
  13.    do
  14.    {
  15.    cout << "Bienvenido al programa para desplegar 10 numeros! \n"<<endl;
  16.    for (i=0; i<=9; i++)
  17.    {
  18.  printf("Ingrese un numero %i: ", i+1);
  19.  scanf("%i", &numeros[i]);
  20.  //FALTA VALIDAR EL INGRESO DE CARACTERES//              
  21.        }
  22.        for (j=0; j<=9; j++)
  23.        {
  24.            cout << numeros[j];
  25.            cout <<"\n";
  26.            }
  27.            fflush(stdin);
  28.            cout << "Desea continuar con el programa ? (S/N) \n";
  29.            cin >>desea;
  30.            desea = toupper(desea);
  31.            if (desea!='S' && desea!='N')
  32.            {
  33.                           do
  34.                           {
  35.                           fflush(stdin);
  36.                           cout <<"Error! inserte (S/N) \n";
  37.                           cin >>desea;
  38.                           desea = toupper(desea);
  39.                           }while (desea!='S' && desea!='N');
  40.                           }  
  41.            }while(desea=='S');
  42.    system("PAUSE");
  43.    return EXIT_SUCCESS;
  44. }
  45.  

Se supone que mi programa se ingresan numeros, pero tengo que validar que no se puedan ingresar caracteres al principio y cuando me pide que inserte un numero, e ingreso un caracter me lanza error. Ayuda plz como uso ahi el isdigit();

Gracias de antemano:)


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: isdigit(); problema con validacion de caracteres
« Respuesta #1 en: 25 Marzo 2015, 08:20 am »

Código
  1.    cout << "Bienvenido al programa para desplegar 10 numeros! \n"<<endl;
  2.    for (i=0; i<=9; i++)
  3.    {
  4.  printf("Ingrese un numero %i: ", i+1);
  5.  scanf("%i", &numeros[i]);

No tiene demasiado sentido que estés mezclando "cout" (propio de C++) con "printf" (herencia de C). Lo suyo, por claridad, es que usases todo el rato "cout". Lo mismo te digo con "cin" y "scanf".

Código
  1. flush(stdin);

Vaya manía con usar fflush sobre los buffer de entrada... fflush está pensado para ser utilizado con los buffer de salida, no con los de entrada. Usar fflush sobre un buffer de entrada va a dar un resultado indeterminado, es decir, puede que en tu casa funcione perfectamente y que delante del profesor falle sin remedio. Hay otras alternativas (aunque quizás no tan "bonitas") para vaciar el buffer de entrada... por ejemplo algo del tipo:

Código
  1. #include <limits>
  2.  
  3. cin.ignore(numeric_limits<int>::max());

Hablando de tu problema, lo que quieres es verificar que la tecla pulsada por el usuario se corresponde, efectivamente, con un número. Lo que tienes que hacer entonces es leer un carácter y verificar si dicho carácter se corresponde con un dígito o no. Algo tal que:

Código
  1. int numero = 0;
  2. char c;
  3. cin >> c;
  4. if ( is_digit( c ) )
  5. {
  6.  // Es un dígito numérico
  7.  numero = c - '0';
  8. }
  9. else
  10. {
  11.  // No es un dígito numérico
  12. }

Por cierto, el include a math.h... que usando la versión C++ debería quedar tal que "#include <cmath>", te sobra. No estás haciendo uso de ninguna función matemática que yo vea.

Un saludo.


« Última modificación: 25 Marzo 2015, 08:22 am por eferion » En línea

Netzari Limas

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: isdigit(); problema con validacion de caracteres
« Respuesta #2 en: 25 Marzo 2015, 22:03 pm »

Disculpa, muchas gracias portu ayuda, ahora ya puedohacerlo, pero falta un detalle que todavia ando checando y si pudieras ayudarme un poco te lo agradeceria:)

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <cmath>
  4. using namespace std;
  5. int numeros[10];
  6.  
  7. int i,n;
  8. int j;
  9. int main(int argc, char *argv[])
  10. {
  11.  
  12.    char desea;
  13.    char c;
  14.    do
  15.    {
  16.    cout << "Bienvenido al programa para desplegar 10 numeros! \n"<<endl;
  17.    for (i=0; i<=9; i++)
  18.    {
  19.  cout<<"Ingrese un numero "  <<i+1<<endl;
  20.  cin >>c;
  21.  if(isdigit(c))
  22.  {
  23.                 numeros[i]= c - '0';
  24.                 }
  25.                 else
  26.                 {
  27.                     cout <<"No es un digito numerico \n";
  28.                     i--;
  29.                     }              
  30.        }
  31.        for (j=0; j<=9; j++)
  32.        {
  33.            cout << numeros[j];
  34.            cout <<"\n";
  35.            }
  36.            fflush(stdin);
  37.            cout << "Desea continuar con el programa ? (S/N) \n";
  38.            cin >>desea;
  39.            desea = toupper(desea);
  40.            if (desea!='S' && desea!='N')
  41.            {
  42.                           do
  43.                           {
  44.                           fflush(stdin);
  45.                           cout <<"Error! inserte (S/N) \n";
  46.                           cin >>desea;
  47.                           desea = toupper(desea);
  48.                           }while (desea!='S' && desea!='N');
  49.                           }  
  50.            }while(desea=='S');
  51.    system("PAUSE");
  52.    return EXIT_SUCCESS;
  53. }
  54.  

Cuando inserto ahora mas de dosdigitos ejemplo: 23 , me lo toma como dos.. y se salta 2 preguntas... :/ que puedo hacer para que el caracter le quepan mas numeros?

GRACIAS:)
En línea

NOIS

Desconectado Desconectado

Mensajes: 67


Ver Perfil
Re: isdigit(); problema con validacion de caracteres
« Respuesta #3 en: 26 Marzo 2015, 08:00 am »

Puedes hacer un array del char, utilizar un int para registrar los números o, ya que estás en C++ usar string
En línea

NOIS dev7
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: isdigit(); problema con validacion de caracteres
« Respuesta #4 en: 26 Marzo 2015, 08:05 am »

Tienes varias opciones:

1. Leer la entrada del tirón como si fuese un string y comparar dígito a dígito:

Código
  1. std::string cad;
  2. cin >> cad;
  3. for( int i=0; i < cad.length( ); ++i )
  4. {
  5.  if ( !std::is_digit( cad[ i ] ) )
  6.  {
  7.    // ERROR
  8.  }
  9. }

2. Intentar leer directamente el número como tal y comprobar errores:

Código
  1. int numero;
  2. cin >> numero;
  3. if ( !cin )
  4. {
  5.  cin.clear( );
  6.  // ERROR: No es un número
  7. }
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema validacion windows xp sp3
Windows
motocros_elche 6 16,219 Último mensaje 10 Junio 2013, 10:15 am
por Randomize
Funcion isdigit
Programación C/C++
mapers 3 4,754 Último mensaje 17 Marzo 2011, 18:57 pm
por Akai
Problema con validacion w3c
Desarrollo Web
corredor10k 0 1,552 Último mensaje 18 Octubre 2013, 20:48 pm
por corredor10k
ayuda con una validacion de solo numeros con la funcion isdigit
Programación General
geshiro 1 2,100 Último mensaje 12 Agosto 2015, 05:32 am
por engel lex
[C][isdigit] Pequeña cuestión función isdigit en mi programa
Programación C/C++
MrCorn 8 4,276 Último mensaje 30 Abril 2021, 19:10 pm
por MrCorn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines