Buenas noches, tengo un problema con el código y no me estoy dando cuenta cuál es el error, al compilar salta error 106.
hola eugenia,
en la sección Laboratorio tienes un enlace a la Descripción de errores en tiempo de ejecución provista por free pascal. allí puedes leer:
106 Invalid numeric format
Reported when a non-numeric value is read from a text file, and a numeric value was expected.
en tu código hay solamente dos lugares en los que puede haber sucedido algo así: la línea que dice read (saldo) o la que dice readln (suma). el lugar en que ocurrió ese problema te debería aparecer en el mensaje de error.
acostúmbrate a extraer toda la info posible de los mensajes de error. en este caso, ya sabrías dónde y por qué fue el error.
dicho esto, imagino que el problema te aparece ya en el arranque. supongamos que iniciás con un saldo de 100 y querés depositar 50. supongo que tu sesión es más o menos así.
ponés 100 ENTER d ENTER 50 ENTER
y ahí se rompe.
y supongo que lo que sucede es:
1. se almacena 100 en saldo
2. se almacena ENTER (o algo parecido) en letra
3. se intenta leer el número d, que no es un número, y
4. se rompe.
y me parece que la solución sería asegurarse que al leer el saldo inicial se consuma todo el renglón: usar readln en lugar de read.
saludos
luis
en la sección Laboratorio tienes un enlace a la Descripción de errores en tiempo de ejecución provista por free pascal. allí puedes leer:
106 Invalid numeric format
Reported when a non-numeric value is read from a text file, and a numeric value was expected.
en tu código hay solamente dos lugares en los que puede haber sucedido algo así: la línea que dice read (saldo) o la que dice readln (suma). el lugar en que ocurrió ese problema te debería aparecer en el mensaje de error.
acostúmbrate a extraer toda la info posible de los mensajes de error. en este caso, ya sabrías dónde y por qué fue el error.
dicho esto, imagino que el problema te aparece ya en el arranque. supongamos que iniciás con un saldo de 100 y querés depositar 50. supongo que tu sesión es más o menos así.
ponés 100 ENTER d ENTER 50 ENTER
y ahí se rompe.
y supongo que lo que sucede es:
1. se almacena 100 en saldo
2. se almacena ENTER (o algo parecido) en letra
3. se intenta leer el número d, que no es un número, y
4. se rompe.
y me parece que la solución sería asegurarse que al leer el saldo inicial se consuma todo el renglón: usar readln en lugar de read.
saludos
luis
Buenas, yo noté un "error" tanto en la solución como en mi programa (mismo error).
El programa pide un saldo ejemplo 1200, luego pide la "letra" sea D, R o X. Si en este momento ingresamos X para indicar que no realizamos movimientos el programa de igual forma entra al WHILE.
No entiendo por qué, ya que debería entrar al WHILE si solo si tipo <> X. Si ingresamos X de primera instancia igualmente queda esperando datos para WHILE.
Esto a que se debe? no debería saltarse el while?
GRacias!
El programa pide un saldo ejemplo 1200, luego pide la "letra" sea D, R o X. Si en este momento ingresamos X para indicar que no realizamos movimientos el programa de igual forma entra al WHILE.
No entiendo por qué, ya que debería entrar al WHILE si solo si tipo <> X. Si ingresamos X de primera instancia igualmente queda esperando datos para WHILE.
Esto a que se debe? no debería saltarse el while?
GRacias!
(editado por problemas de formato)
hola michael,
supongo que la entrada que te molesta es: 1200X<ENTER>, pero esa no es una entrada válida. la entrada correcta sería 1200<ENTER>X<ENTER>.
la solución publicada queda esperando cuando pones 1200X<ENTER> porque lee el 1200 en una variable real, y luego consume toda la línea (es un readln); de esa forma, el X nunca se cargó en ninguna variable. y el siguiente read queda esperando datos para WHILE
saludos
luis
hola michael,
supongo que la entrada que te molesta es: 1200X<ENTER>, pero esa no es una entrada válida. la entrada correcta sería 1200<ENTER>X<ENTER>.
la solución publicada queda esperando cuando pones 1200X<ENTER> porque lee el 1200 en una variable real, y luego consume toda la línea (es un readln); de esa forma, el X nunca se cargó en ninguna variable. y el siguiente read queda esperando datos para WHILE
saludos
luis