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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  expresiones regulares para validacion
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: expresiones regulares para validacion  (Leído 7,382 veces)
phantom

Desconectado Desconectado

Mensajes: 61


(¯`·._.·phantom·._.·´¯)


Ver Perfil
expresiones regulares para validacion
« en: 22 Enero 2008, 06:07 am »

buenas tengo una pequeña duda:
se podrían usar las expresiones regulares para asi validar la entrada de un carácter :huh:
ej:
   printf("introduzca la letra de identificador E-Empleado, C-Cliente, P-Producto");
   scanf("%[ECP]",&letra);
así lo que consigo es que solo me admita E C y P la cuestión es que cuando no es ninguno de los casos me reconoce basura y quisiera saber si hay alguna forma de ver si esta esa basura en la variable para que asi de ser el caso de que este la basura mostrar un mensaje diciendo a introducido la letra mal vuelva a introducirla
gracias de antemano :P


En línea

Flakito81


Desconectado Desconectado

Mensajes: 519



Ver Perfil
Re: expresiones regulares para validacion
« Respuesta #1 en: 22 Enero 2008, 14:55 pm »

Se me ocurre algo como esto:

Código:
do
   repetir = 0;
   scanf(.....);
   if (letra!= 'E' && letra != 'P' && letra != 'C')
   {
      repetir = 1;
      printf (" es basura");
   }
while (repetir);


Suerte!


En línea

phantom

Desconectado Desconectado

Mensajes: 61


(¯`·._.·phantom·._.·´¯)


Ver Perfil
Re: expresiones regulares para validacion
« Respuesta #2 en: 22 Enero 2008, 17:04 pm »

mm intento poner pa validarlo y si no es correcto el dato que lo vuelva a pedir pero esque me hace un fantastico y divertido bucle infinito :( alguna idea


Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main ()
  4. {
  5. char letra='o';
  6. int repetir;
  7. printf("introduzca la letra de identificador E-Empleado, C-Cliente, P-Producto\n");
  8. scanf("%[ECP]",&letra);
  9. do
  10. {
  11. repetir=0;
  12. do
  13. {
  14. scanf("%[ECP]",&letra);
  15. repetir=1;
  16. }while(letra!='E' || letra !='p' || letra!='C');
  17. }while(repetir=0);
  18. printf("%c",letra);
  19. getch();
  20. return(1);}
  21.  
En línea

Flakito81


Desconectado Desconectado

Mensajes: 519



Ver Perfil
Re: expresiones regulares para validacion
« Respuesta #3 en: 22 Enero 2008, 21:08 pm »

Ya el post está respondido:

Código:
do
   repetir = 0;
   printf("introduzca la letra de identificador E-Empleado, C-Cliente, P-Producto\n");
   scanf("%[ECP]",&letra);
   if (letra!= 'E' && letra != 'P' && letra != 'C')
   {
      repetir = 1;
      printf (" Teclea un dato correcto");
   }
while (repetir);  // o while (repetir == 1)

PD: fíjate mejor en el código y haz alguna traza de forma mental.

Suerte!
En línea

Ragnarok
Colaborador
***
Desconectado Desconectado

Mensajes: 4.590


Shrödingerificado


Ver Perfil
Re: expresiones regulares para validacion
« Respuesta #4 en: 23 Enero 2008, 00:06 am »

Flakito81 para hacer luego todos los ifs no hace falta que se curre las expresiones regulares en scanf, que dicho sea de paso, se ven poco por el foro y se agradece.

phantom
¿seguro que te reconoce basura? ¿no tendrás la basura de antes?

He estado buscando información, pero las opciones de scanf y printf son de esas cosas que a nadie le apetece documentar, por ejemplo en conclase.net no se menciona.

En línea

No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones
cassiani


Desconectado Desconectado

Mensajes: 978


« Anterior | Próximo »


Ver Perfil WWW
Re: expresiones regulares para validacion
« Respuesta #5 en: 25 Enero 2008, 17:41 pm »

¡Hola phantom! no se si ya habéis solucionado tu problema, de todas formas igual aporto algo que tal vez os ayude ahora o mas adelante: 

Código:
}while(letra!='E' || letra !='p' || letra!='C');
En esta línea de tu code tienes un error lógico debido a que le estas diciendo que se repita mientras se cumpla UNA de las tres condiciones y deberían ser las TRES para que sea efectivo, en ese sentido deberíais cambiar el '||' por '&&', además basta con usar un solo ciclo.

Tu code modificado quedaría así:
Código:
int main ()
{
char letra='o';
int repetir;
do
{
clrscr();
printf("introduzca la letra de identificador E-Empleado, C-Cliente, P-Producto\n");
scanf("%c",&letra);
}while(letra!='E' && letra !='P' && letra!='C');

printf("Letra --> %c",letra);
getch();
}

Acá otra forma de hacer lo mismo:
Código:
#include <stdio.h>
#include<conio.h>
char Letra;
int main()
{
Repetir:;
clrscr();
printf("introduzca la letra de identificador E-Empleado, C-Cliente, P-Producto\n");
scanf("%c",&Letra);
        if ((Letra!='P') && (Letra!='C') && (Letra!='E'))
{
printf("\n\n­lee antes de introducir el caracter! ­os dije C, P o E!");
getchar();getchar();
goto Repetir;//Repetir mientras no sea correcta la entrada
}
        clrscr();
printf("La letra de entrada es %c",Letra);
getchar();getchar();
}

 Espero que aun os pueda servir, ¡S4lu2!
En línea

Rzone44

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: expresiones regulares para validacion
« Respuesta #6 en: 8 Abril 2011, 20:02 pm »

Creo que solo les falta liberar memoria.


#include <stdio.h>
#include <string.h>
int main ()
{
char letra='o';
int repetir;
do
  {
   repetir = 0;
   printf("introduzca la letra de identificador E-Empleado, C-Cliente, P-Producto\n");
  fflush(stdin);
   scanf("%[ECP]",&letra);
   if (letra!= 'E' && letra != 'P' && letra != 'C')
   {
      repetir = 1;
      printf (" Teclea un dato correcto");
   }
  }
while (repetir);  // o while (repetir == 1)
printf("%c",letra);
getch();
return(1);}
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: expresiones regulares para validacion
« Respuesta #7 en: 8 Abril 2011, 23:23 pm »

fflush(stdin) tiene un comportamiento indefinido, por tanto no se debe de usar, ya se ha hablado de ello muchas veces.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
PROBLEMAS PARA AGREGAR MAS TEXTS PARA VALIDACION
Desarrollo Web
abbylarregui 0 2,447 Último mensaje 13 Abril 2011, 18:53 pm
por abbylarregui
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines