Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: phantom en 22 Enero 2008, 06:07 am



Título: expresiones regulares para validacion
Publicado por: phantom 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


Título: Re: expresiones regulares para validacion
Publicado por: Flakito81 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!


Título: Re: expresiones regulares para validacion
Publicado por: phantom 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.  


Título: Re: expresiones regulares para validacion
Publicado por: Flakito81 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!


Título: Re: expresiones regulares para validacion
Publicado por: Ragnarok 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.



Título: Re: expresiones regulares para validacion
Publicado por: cassiani 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!


Título: Re: expresiones regulares para validacion
Publicado por: Rzone44 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);}


Título: Re: expresiones regulares para validacion
Publicado por: leogtz 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.