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 texto y numero!! Turbo c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: validar texto y numero!! Turbo c++  (Leído 11,939 veces)
kriz145

Desconectado Desconectado

Mensajes: 1


Ver Perfil
validar texto y numero!! Turbo c++
« en: 16 Enero 2012, 05:43 am »

Buenas noches

tengo un problema, necesito validar numeros y letras: esto es lo que llevo

#include <stdio.h>
#include <ctype.h>
#include <conio.h>

char *nom;
char *num;

main()
{
clrscr();
printf("ingrese nombre:");
gets(nom);
while(*nom)
{
if (isalpha(*nom)) printf("%c",*nom);
else printf("ERROR");
nom++;

}
getch();

clrscr();
printf("ingrese edad:");
gets(num);
while(*num)
{
if (isdigit(*num)) printf("%c",*num);
else printf("ERROR");
num++;

}
getch();
}

pero por ejemplo, quiero que si pido edad y pongo letras me marcara error, quiero que regrese y me lo vuelva a pedir hasta que ponga numero... no se si me explique bien =(. chao!!


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: validar texto y numero!! Turbo c++
« Respuesta #1 en: 16 Enero 2012, 15:35 pm »

El programa tal como esta no funcionara correctamente por varios errores críticos.

No quiero sonar como un [CENSORED] de lo mas pedante pero creo que acabas de romper todas (o casi todas) las recomendaciones del tema |Lo que no hay que hacer en C/C++. Nivel basico|. Espero no lo tomes a mal (solo es un comentario con humor).

Lo primero (si es posible) es cambiar de compilador por uno mas reciente y actualizado, recomendaciones hay muchas, solo tienes que usar el motor de búsqueda de los foros.

En cuanto al programa los errores mas importantes son utilizar las variables "nom" y "num" sin antes asignarles un valor (la dirección en memoria retornada por malloc, calloc o realloc). Al no hacerlo el valor inicial de ambas variables es NULL.

En cuanto a los bucles una forma mejor es verificar cada carácter. Aquí tienes el problema del espacio blanco antes y después de un numero así como el espacio intercalado en nombres compuestos como "Jose Maria".

Bueno, comparas cada carácter y si es valido continuas. Con ello al terminar el bucle basta con revisar si el ultimo carácter procesado es el '\0'. Si es así la cadena es valida.

Poco mas o poco menos (para el nombre):
Código
  1. for (i = 0; isalpha(nom[i]) || isspace(nom[i]); i++)
  2.   ;
  3. if (nom[i] == '\0'){
  4.   /* La cadena es valida */
  5. }else {
  6.   /* No lo es */
  7. }

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
bdoX

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Re: validar texto y numero!! Turbo c++
« Respuesta #2 en: 16 Enero 2012, 17:55 pm »

Una manera de validar bien mis entradas de datos,  y que me gusta muchisimo, es:

Código
  1. #include <stdio.h>
  2. #include <windows.h>
  3.  
  4. #define TAM 10
  5.  
  6. void validar_letras (char *p);
  7. char getch ( );
  8.  
  9. int main ()
  10. {
  11.    char buffer[TAM];
  12.  
  13.    printf ( "ingrese cadena: " );
  14.    validar_letras (buffer);
  15.  
  16.    printf ( "\n%s", buffer );
  17.  
  18.    setbuf (stdin, NULL);
  19.    getchar ();
  20.    return 0;
  21. }
  22.  
  23. void validar_letras (char *p)
  24. {
  25.    int i;
  26.    char tecla;
  27.  
  28.    /*importante inicializar los valores
  29.     ya que la implementacion que hice lo amerita*/
  30.    i = 0;
  31.    p[0] = '\0';
  32.  
  33.    do
  34.    {
  35.        tecla = getch ();//atrapa un caracter sin dejar un eco
  36.  
  37.        /*8 es la tecla para eliminar un caracter
  38.         y el i obligaotiamente tiene que ser mayor que cero
  39.         ya que si entra al if y tiene valor cero, el valor de i
  40.         decrementará y p tendría un subindice -1, "p[-1]"¿?*/
  41.        if ( i > 0 && tecla == 8 )
  42.        {
  43.            printf ( "\b \b" );
  44.            p[--i] = '\0';
  45.        }
  46.        else
  47.        {
  48.            /*rango de letras mayusculas y minusculas y 32 es el espacio*/
  49.            if ( (tecla >= 65 && tecla <= 95)  ||
  50.                 (tecla >= 97 && tecla <= 122) ||
  51.                  tecla == 32 )
  52.            {
  53.                printf ( "%c", tecla );
  54.                p[i++] = tecla;
  55.            }
  56.        }
  57.    } while ((tecla != 13 || p[0] == '\0') && i < TAM);
  58.    /* 13 inidica el Enter, i tiene que ser menor
  59.     que TAM pues de lo contrario, estaría accediendo
  60.     a memoria no reservada*/
  61.  
  62.    p[i] = '\0'; /*colocamos el fin de cadena*/
  63.  
  64.    return ;
  65. }
  66.  
  67. char getch ( )
  68. {
  69.    char car;
  70.    DWORD leidos, modo;
  71.  
  72.    GetConsoleMode ( GetStdHandle (STD_INPUT_HANDLE), &modo );
  73.    SetConsoleMode ( GetStdHandle (STD_INPUT_HANDLE), modo &
  74.                     !ENABLE_ECHO_INPUT & !ENABLE_PROCESSED_INPUT );
  75.    ReadConsole ( GetStdHandle (STD_INPUT_HANDLE), &car, 1, &leidos, NULL );
  76.    SetConsoleMode ( GetStdHandle (STD_INPUT_HANDLE), modo );
  77.    return car;  
  78. }
  79.  

Para que decir con los numeros, es lo mismo.

saludOS!
« Última modificación: 16 Enero 2012, 20:14 pm por bdoX » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Convertir de numero a texto
PHP
cuerty 2 2,312 Último mensaje 25 Julio 2008, 18:53 pm
por cuerty
validar nass(numero de la seguridad social)
PHP
carlosyosoyyo 0 3,896 Último mensaje 14 Abril 2009, 14:03 pm
por carlosyosoyyo
Cómo validar el texto que no está vacío?
PHP
HJ ~ 7 10,445 Último mensaje 7 Junio 2010, 14:57 pm
por :ohk<any>
validar numero cuenta bancaria en java
Java
valera22 6 10,439 Último mensaje 14 Marzo 2013, 19:41 pm
por legnacaido
generador de texto y numero
Programación Visual Basic
asdexiva 2 1,990 Último mensaje 25 Diciembre 2014, 05:31 am
por Wickown
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines