• Sábado 27 de Abril de 2024, 00:42

Autor Tema:  Re: No Encuentro El Error!!!!.  (Leído 1676 veces)

_.B._

  • Miembro activo
  • **
  • Mensajes: 88
    • Ver Perfil
Re: No Encuentro El Error!!!!.
« en: Jueves 22 de Enero de 2004, 22:48 »
0
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
  1. PROGRAM Prac002;
  2. USES CRT;
  3. VAR Dd,Mm,Aa:WORD;
  4.     Codigo:STRING;
  5.     Resp:CHAR;
  6.  
  7.     PROCEDURE LeerTexto (WriteTexto:STRING; VAR OkeTexto:STRING;
  8.                          RespAttr:BYTE);
  9.       VAR Oke:BOOLEAN;
  10.           X,Y,X2,Y2,TAtt1:BYTE;
  11.       BEGIN
  12.         X:=WHEREX;
  13.         Y:=WHEREY;
  14.         REPEAT
  15.           Oke:=TRUE;
  16.           GOTOXY (X,Y);
  17.           CLREOL;
  18.           WRITE (WriteTexto,': ');
  19.           TAtt1:=TEXTATTR;
  20.           TEXTATTR:=RespAttr;
  21.           READ (OkeTexto);
  22.           TEXTATTR:=TAtt1;
  23. {}
  24.           IF LENGTH (OkeTexto) = 0 THEN
  25.             BEGIN
  26.               X2:=WHEREX;
  27.               Y2:=WHEREY;
  28.               TEXTCOLOR (14);
  29.               WRITE (#7);
  30.               WRITE ('  No ha escrito nada!.');
  31.               READKEY;
  32.               GOTOXY (X2,Y2);
  33.               TEXTCOLOR (4);
  34.               CLREOL;
  35.               Oke:=FALSE
  36.             END
  37. {}
  38.         UNTIL Oke;
  39.         WRITELN
  40.       END;
  41.  
  42.     PROCEDURE LeerFecha (WriteTexto:STRING; VAR Dd,Mm,Aa:WORD;
  43.                          RespAttr:BYTE);
  44.       VAR Oke:BOOLEAN;
  45.           X,Y,X2,Y2,TAtt1:BYTE;
  46.       BEGIN
  47.         X:=WHEREX;
  48.         Y:=WHEREY;
  49.         WRITELN (WriteTexto);
  50.         WRITE ('(DD, MM, AAAA, cada uno seguido de <ENTER>): ');
  51.         TAtt1:=TEXTATTR;
  52.         TEXTATTR:=RespAttr;
  53.         X2:=WHEREX;
  54.         Y2:=WHEREY;
  55.         CLREOL;
  56.         WRITE ('  /  /');
  57.         GOTOXY (X2,Y2);
  58.         READ (Dd);
  59.         GOTOXY (X2,Y2);
  60.         WRITE (Dd:2,'/');
  61.         READ (Mm);
  62.         GOTOXY (X2,Y2);
  63.         WRITE (Dd:2,'/',Mm:2,'/');
  64.         READ (Aa);
  65.         GOTOXY (X2,Y2);
  66.         WRITELN (Dd:2,'/',Mm:2,'/',Aa:4);
  67.         TEXTATTR:=TAtt1
  68.       END;
  69.  
  70. BEGIN
  71.   REPEAT
  72.     TEXTBACKGROUND (7);
  73.     CLRSCR;
  74.     TEXTCOLOR (0);
  75.     WRITELN (' Introduzca los datos de la Póliza a vender,');
  76.     WRITELN ('y los datos del Automóvil a asegurar:');
  77.     WRITELN;
  78.     WRITELN;
  79.     TEXTCOLOR (4);
  80.     LeerTexto ('Código de la Póliza (0 para salir)',Codigo,117);
  81.     WRITELN;
  82.     LeerFecha ('Fecha de Adquisición de la Póliza',Dd,Mm,Aa,117);
  83.     WRITELN;
  84.     WRITE (' ¿Desea procesar otra Póliza? (s/n) ');
  85.     Resp:=UPCASE (READKEY)
  86.   UNTIL Resp = 'N';
  87.   WRITELN;
  88.   WRITE ('            FIN.');
  89.   READKEY
  90. END.
  91.  
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:
¡Olmo, dame peras!
www.BernardoLG.net

DriverOp

  • Miembro MUY activo
  • ***
  • Mensajes: 201
    • Ver Perfil
Re: No Encuentro El Error!!!!.
« Respuesta #1 en: Viernes 23 de Enero de 2004, 16:09 »
0
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

  • Miembro MUY activo
  • ***
  • Mensajes: 201
    • Ver Perfil
Re: No Encuentro El Error!!!!.
« Respuesta #2 en: Viernes 23 de Enero de 2004, 16:14 »
0
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._

  • Miembro activo
  • **
  • Mensajes: 88
    • Ver Perfil
Re: No Encuentro El Error!!!!.
« Respuesta #3 en: Sábado 24 de Enero de 2004, 02:13 »
0
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
: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:
¡Olmo, dame peras!
www.BernardoLG.net