Pascal/Turbo Pascal - Solucionar un error

 
Vista:

Solucionar un error

Publicado por AprendizInformatico (7 intervenciones) el 05/03/2009 21:11:15
Hola a todos.

Tengo una duda de como tratar un error si se introduce por teclado un dato erroneo;
Expongo un ejemplo en mini programa.

program numeros;
var
num:integer;

begin
repeat
writeln('Introduzca un numero: ');
readln(num);
until (num>=1) and (num<=40);
end.

El problema es que al dar un caracter como por ejemplo "c", el programa falla por ser un valor no valido para la variable.
Desearia saber si es posible solucionar este error, de tal forma que si se introduce un caracter por teclado la variable no tome el valor y vuelva a preguntar de nuevo hasta que metan un valor correcto.

Gracias a todos por adelantado
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Solucionar un error

Publicado por Miguel (159 intervenciones) el 06/03/2009 03:18:00
Podes hacerlo utilizando la directiva $I . Es una herramienta que ayuda mucho, ya que el compilador cuando encuentra un error deja de ejecutarse y sale de la aplicación por medio de esta directiva, ahora para que no ocurra esto, uno debe desactivar esa directiva, ¿de que manera?, de la siguiente forma: {$I-} . El "-" denota que esta desactivado, para volver a activarlo hay que utilizar "+" ({$I+}). Al encontrar un error, el compilador asigna a una variable llamada "IOResult" (es del tipo de un subrango de enteros) el numero del error, si no hay error, le asigna "0", y es con respecto a ese valor que nosotros comparamos, hacemo que siga ingresando el numero hasta el IOResult valga 0, es decir que no hay error.
Hay muchas directivas, la directiva $R controla los rangos tambien, trabaja de modo similar nada mas que al desactivarla lo unico que hace es que siga corriendo el programa. Tengo entendido eso. De todas formas con este ejemplo vas a andar bien.

Ejemplo:

PROGRAM ejemplo;
USES CRT;
VAR
num : INTEGER;
resultado : INTEGER;
BEGIN
{$I-}
REPEAT
CLRSCR;
WRITE('Introduzca un numero: ');
READLN(num);
resultado:=IOResult;
UNTIL (resultado=0)AND(num>=1)AND(num<=40);
{$I+}
READKEY;
END.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Solucionar un error

Publicado por ApaarendizInformatico (7 intervenciones) el 07/03/2009 10:35:11
Muchas gracias por tu respuesta, la probare ahora mismo, solo una cosa, sabes de alguna pagina que venga las directivas, ya que en san google las he intentado buscar pero al ser caracteres extraño no encuentra nada.
Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Solucionar un error

Publicado por Miguel (159 intervenciones) el 07/03/2009 19:09:03
Lamentablemente no tengo ninguna, pero fijate que en el "ayuda" del Turbo Pascal vienen todas. Sino en cualquier libro sobre pascal.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar