elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 21:26  


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  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 506 veces)
kriz145

Desconectado Desconectado

Mensajes: 1


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

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: 382


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

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
for (i = 0; isalpha(nom[i]) || isspace(nom[i]); i++)
  ;
if (nom[i] == '\0'){
  /* La cadena es valida */
}else {
  /* No lo es */
}

Un saludo


En línea

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
bdoX

Desconectado Desconectado

Mensajes: 31



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

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

Código
#include <stdio.h>
#include <windows.h>
 
#define TAM 10
 
void validar_letras (char *p);
char getch ( );
 
int main ()
{
   char buffer[TAM];
 
   printf ( "ingrese cadena: " );
   validar_letras (buffer);
 
   printf ( "\n%s", buffer );
 
   setbuf (stdin, NULL);
   getchar ();
   return 0;
}
 
void validar_letras (char *p)
{
   int i;
   char tecla;
 
   /*importante inicializar los valores
   ya que la implementacion que hice lo amerita*/

   i = 0;
   p[0] = '\0';
 
   do
   {
       tecla = getch ();//atrapa un caracter sin dejar un eco
 
       /*8 es la tecla para eliminar un caracter
       y el i obligaotiamente tiene que ser mayor que cero
       ya que si entra al if y tiene valor cero, el valor de i
       decrementará y p tendría un subindice -1, "p[-1]"¿?*/

       if ( i > 0 && tecla == 8 )
       {
           printf ( "\b \b" );
           p[--i] = '\0';
       }
       else
       {
           /*rango de letras mayusculas y minusculas y 32 es el espacio*/
           if ( (tecla >= 65 && tecla <= 95)  ||
                (tecla >= 97 && tecla <= 122) ||
                 tecla == 32 )
           {
               printf ( "%c", tecla );
               p[i++] = tecla;
           }
       }
   } while ((tecla != 13 || p[0] == '\0') && i < TAM);
   /* 13 inidica el Enter, i tiene que ser menor
   que TAM pues de lo contrario, estaría accediendo
   a memoria no reservada*/

 
   p[i] = '\0'; /*colocamos el fin de cadena*/
 
   return ;
}
 
char getch ( )
{
   char car;
   DWORD leidos, modo;
 
   GetConsoleMode ( GetStdHandle (STD_INPUT_HANDLE), &modo );
   SetConsoleMode ( GetStdHandle (STD_INPUT_HANDLE), modo &
                    !ENABLE_ECHO_INPUT & !ENABLE_PROCESSED_INPUT );
   ReadConsole ( GetStdHandle (STD_INPUT_HANDLE), &car, 1, &leidos, NULL );
   SetConsoleMode ( GetStdHandle (STD_INPUT_HANDLE), modo );
   return car;  
}
 

Para que decir con los numeros, es lo mismo.

saludOS!
« Última modificación: 16 Enero 2012, 20:14 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 723 Último mensaje 25 Julio 2008, 18:53
por cuerty
Validar numero fraccionario
Programación C/C++
JuanAyala 13 2,945 Último mensaje 6 Marzo 2009, 22:55
por 0x0309
validar nass(numero de la seguridad social)
PHP
carlosyosoyyo 0 1,604 Último mensaje 14 Abril 2009, 14:03
por carlosyosoyyo
numero de IVs necesarias para validar una contraseña que *si* esta en el diccio.
Hacking Wireless
euroboy 8 3,062 Último mensaje 16 Mayo 2009, 20:58
por euroboy
Cómo validar el texto que no está vacío?
PHP
HJ ~ 7 3,191 Último mensaje 7 Junio 2010, 14:57
por ohk
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines