Programación General > Pascal
Re: No Encuentro El Error!!!!.
(1/1)
_.B._:
Saludos!.
Cansancio, privación del sueño (o por lo menos de razonables horas del mismo), o simple ignorancia (no de forma excluyente) pueden ser la causa de que no encuentre el porqué éste segmento de un programa que estoy diseñando (mas de 1000 lineas, no vale la pena que lo pegue completo) entra en un ciclo cuando para el Código no introduzco datos.
El lenght va a ser 0, pero luego toma un valor nulo y entra con length = 0 y cae en el ciclo.
--- Código: Text ---PROGRAM Prac002;USES CRT;VAR Dd,Mm,Aa:WORD; Codigo:STRING; Resp:CHAR; PROCEDURE LeerTexto (WriteTexto:STRING; VAR OkeTexto:STRING; RespAttr:BYTE); VAR Oke:BOOLEAN; X,Y,X2,Y2,TAtt1:BYTE; BEGIN X:=WHEREX; Y:=WHEREY; REPEAT Oke:=TRUE; GOTOXY (X,Y); CLREOL; WRITE (WriteTexto,': '); TAtt1:=TEXTATTR; TEXTATTR:=RespAttr; READ (OkeTexto); TEXTATTR:=TAtt1;{} IF LENGTH (OkeTexto) = 0 THEN BEGIN X2:=WHEREX; Y2:=WHEREY; TEXTCOLOR (14); WRITE (#7); WRITE (' No ha escrito nada!.'); READKEY; GOTOXY (X2,Y2); TEXTCOLOR (4); CLREOL; Oke:=FALSE END{} UNTIL Oke; WRITELN END; PROCEDURE LeerFecha (WriteTexto:STRING; VAR Dd,Mm,Aa:WORD; RespAttr:BYTE); VAR Oke:BOOLEAN; X,Y,X2,Y2,TAtt1:BYTE; BEGIN X:=WHEREX; Y:=WHEREY; WRITELN (WriteTexto); WRITE ('(DD, MM, AAAA, cada uno seguido de <ENTER>): '); TAtt1:=TEXTATTR; TEXTATTR:=RespAttr; X2:=WHEREX; Y2:=WHEREY; CLREOL; WRITE (' / /'); GOTOXY (X2,Y2); READ (Dd); GOTOXY (X2,Y2); WRITE (Dd:2,'/'); READ (Mm); GOTOXY (X2,Y2); WRITE (Dd:2,'/',Mm:2,'/'); READ (Aa); GOTOXY (X2,Y2); WRITELN (Dd:2,'/',Mm:2,'/',Aa:4); TEXTATTR:=TAtt1 END; BEGIN REPEAT TEXTBACKGROUND (7); CLRSCR; TEXTCOLOR (0); WRITELN (' Introduzca los datos de la Póliza a vender,'); WRITELN ('y los datos del Automóvil a asegurar:'); WRITELN; WRITELN; TEXTCOLOR (4); LeerTexto ('Código de la Póliza (0 para salir)',Codigo,117); WRITELN; LeerFecha ('Fecha de Adquisición de la Póliza',Dd,Mm,Aa,117); WRITELN; WRITE (' ¿Desea procesar otra Póliza? (s/n) '); Resp:=UPCASE (READKEY) UNTIL Resp = 'N'; WRITELN; WRITE (' FIN.'); READKEYEND. Publiqué el .PAS en:
http://mipagina.cantv.net/bernardolg/tp/FECHATXT.PAS
(click con el boton derecho del MOUSE, y "Guardar destino como...").
GRACIAS a quien intente ayudarme.
Atte.
Bernardo L. :comp:
DriverOp:
Hola Bernardo.
Vengo desde LWP. No he probado el código pero lo primero que noto es que estas usando Read para leer un string lo cual puede causar problemas con el valor asignado en la variable pues esta debe terminar en #0, cambia por ReadLn.
Ahora descargo el código y lo pruebo por mi cuenta.
DriverOp:
Efectivamente es ese el problema, entre otros. Cuando pides la fecha no estás validando el rango de los números ingresados, deberías pedir esos datos primero en un string, tratar de convertir a número y si la conversión falla volver a pedir.
_.B._:
Ouch!!.
Se me salió lo novato!!.
GRACIAS!!. No tenia ni idea que usar el read en lugar del readln me pudiera traer problemas.
--- Citar ---Cuando pides la fecha no estás validando el rango de los números ingresados
--- Fin de la cita ---
:hola: ya se, ya se... es que con la prisa :rolleyes:
Bueno, como ya lo tengo que entregar el Lunes, me sale meterle mas :smartass:
Gracias!.
Bernardo L. :comp:
Navegación
Ir a la versión completa