SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: mauricio2 en Lunes 17 de Mayo de 2004, 16:43
-
buenas , tengo este codigo en c++ ya tengo validado el ingreso de numeros letras y caracteres especial pero no he podido limitar el largo de los texto que me ingresan, por ejemplo
el numero de cedula es de 10 caracteres el problema es que si dejo pegado el teclado sigue y sigue y se me daña el programa lo otro es que no me deje seguri al siguiente dato si que digite algo, se que no es un foro de c++ pero el php es algo parecido espero me colaboren amigos es para entregar un trabajo de la U.
gracias
captura dato
-----------------------------
printf("Digite el NOMBRE : ");
gotoxy(10,8);
strcpy(dato.nombre,valp());
-----------------------------
char *valpn()
{
int vf=0;
char ch;
char vcad[40];
vcad[0]='\0';
do
{
ch=getch();
if((ch >=65)&&(ch<=90)||(ch>=97)&&(ch<=122)||(ch==8)||(ch>=48)&&(ch<=57)||(ch=='-')||(ch=='.')||(ch ==1)||(ch==' ')||(ch=='@'))
{
vcad[vf++]=ch;
vcad[vf]='\0';
printf("%c",ch);
}
}
while((ch!=13)||(vcad[vf]!=NULL));
return (vcad);
}
-
Puede ser porque estas esperando un ENTER aca???
while((ch!=13)||(vcad[vf]!=NULL));
el 13 es ENTER
Salu2!!!!!!!!!!!
-
SI PERO SI SE LO QUITO NO ME DEJA PASA AL OTRO DATO :(
-
Agregale la condicion de leer hasta 10 (o lo q sea) caracteres a parte de comparar contra el ENTER.
Salu2!!!!!!!!!!
-
ALGO ASI
while((ch<=10)||(vcad[vf]!=NULL));
O ES
while((vcad[vf]<=10));
POR CREEME QUE YA Y NADA :(
-
No, lo q tendrias q hacer seria declarar un contador y medida q lees un caracter lo incrementas en uno y en el while comparas contra ese contador q sea menor q 10 en tu caso y listo, asi solo lees 10 caracteres o hasta un ENTER
Salu2!!!!!
-
algo asi:
char *valpn()
{
int vf=0;
char ch;
char vcad[40];
vcad[0]='\0';
do
{
int n;
n=0;
ch=getch();
if((ch >=65)&&(ch<=90)||(ch>=97)&&(ch<=122)||(ch==8)||(ch>=48)&& (ch<=57)||(ch=='-')||(ch=='.')||(ch ==1)||(ch==' ')||(ch=='@'))
{
vcad[vf++]=ch;
vcad[vf]='\0';
printf("%c",ch);
}
n++;
}
while((n<=10)(ch!=13)||(vcad[vf]!=NULL));
return (vcad);
}
ya lo probe de esa forma :(
sera que tengo algo mal?
-
Si, estas declarando el n dentro del DO-WHILE y lo estas cargando con 0 y luego lo uincrementas y luego a cero y asi.
Fijate.
Lo otro q no entiendo es vcad[vf]!=NULL . Q es eso??? ya q vcad es un vector de caracteres, por q lo comparas con NULL?????
Salu2!!!!!!
-
Por lo que interprete del codigo, me parece que lo que queres es capturar una cadena del teclado omitiendo algunos caracteres. Si es asi, tal vez el siguiente codigo te sirva:
#define MAX 80 // define el largo maximo de la cadena
char * valpn() {
int i; // cuenta los caracteres ingresados
char buffer[MAX]; // almacena los caracteres ingresados
do {
for (i=0; i < MAX && (buffer = getch())!= '\r'; ++i)
(isalpha(buffer || isdigit(buffer || isspecial(buffer))))? putch(buffer): --i;
} while i < 1; // para que no quede vacio el buffer i tiene que ser mayor a 0
buffer = '\0'; // para finalizar la cadena
return buffer;
}
// isalpha(char c) y isdigit(char c) son funciones de biblioteca que testean
// si c es una letra o un digito respectivamente
#define TOPE 6 // define la cantidad de caracteres especiales
char special[] = {'-','.',' ','@',8,1}; // arreglo de caracteres especiales
int isspecial(char c) {
int i;
for (i=0; i < TOPE && special != c; ++i)
; // VACIO
return i < TOPE;
} // revisa el arreglo de caracteres especiales y devuelve TRUE si lo encontro :lol:
-
TE AGRADEZCO MUCHO TU CODIGO ES BUENO, EN CUANTO EL MIO YA LO LOGRE HACER POR MEDIO DE UN CONTADOR.
LO HABIA INTENETADO ANTES PERO TENIA UN ERROR POR LO TANTO EL BLUCE BO ME FUNCIONABA PAR CONTAR LAS ENTRADAS DE CADA CARACTER PERO Y DE TODAS FORMAS TODOS SON UNOS AMIGAZOS
BUENO HAY ALGO QUE ME FALTA Y ES COMO VALIDAR QUE ME INGRESEN DATOS Y NO QUE ME LOS DEJE VACIOS MIREN ESTO:
EN EL WHILE
ESTA REFERENCIADO EL NULL SUPUESTAMENTE PARA UQE LA CADENA NO ESTE VACIA PERO NO FUNCIONA, NO SE SI FUNCIONE EL NULL INTENTE CON NULL Y TANBIEN CON COMILLAS Y UN VACIO.
ALGUIEN EM PODRIA DAR UN EJEMPLITO DE COMO VALIDAR UN VACIO DE UN INGRESO DE DATOS.
LA OTRA ES QUE CUANDO LLEGA AL RANGO QUE DELIMITO QUE ES 7 CARACTERES EL AUTOMATICAMENTE ME PASA AL SIGUIENTE PRINTF QUE ME PIDE EL NUEVO DATO COMO HAGO PARA QUE NO ME SIGA DERECHO SI NO QUE AL FINAL DE LA CADENA ME PIDA NECESARIAMENTE ENTEER PARA PODER SEGUIR CON EL SIGUIENTE DATO.
SALUDO
SI ALGUIEN NECESITA EL CODIGO QUE TRABAJO PARA LA VALIDACION CON MUCHO GUSTO SE LOS EXPLICARE.
-
AMIGOS YA TERMINE MUCHAS GRACAIS ALOS QUE DE ALGUNA FORMA ME COLABORARON.
;)