Utilizamos cookies propias y de terceros para mejorar la experiencia de navegación, y ofrecer contenidos y publicidad de interés.
Al continuar con la navegación entendemos que se acepta nuestra política de cookies.
Iniciar sesión Cerrar
Correo:
Contraseña:
Entrar
Recordar sesión en este navegador
Iniciar sesiónIniciar sesiónCrear cuentaCrear cuenta

Pascal/Turbo Pascal - Solucionar un error

Vista:
Me gusta: Está pregunta es útil y esta clara
0
No me gusta: Está pregunta no esta clara o no es útil
 
Asunto:

Solucionar un error

Autor:AprendizInformatico (7 intervenciones)
Fecha: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
Responder
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:

RE:Solucionar un error

Autor:Miguel (162 intervenciones)
Fecha: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.
Comentar
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:

RE:Solucionar un error

Autor:ApaarendizInformatico (7 intervenciones)
Fecha: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
Comentar
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:

RE:Solucionar un error

Autor:Miguel (162 intervenciones)
Fecha: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.
Comentar
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:

RE:Solucionar un error

Autor:AprendizInformatico (7 intervenciones)
Fecha:07/03/2009 23:30:51
Muchas gracias lo toy mirando en la ayuda
Comentar