Pascal/Turbo Pascal - Problemas de lectura

 
Vista:

Problemas de lectura

Publicado por Susana (3 intervenciones) el 27/10/2006 16:46:13
Hola,
Me pidieron escribiera un programa con if anidados con dos de las tres variables dada por un usuario, este es mi código:
....
begin
write('dame el nombre');
read(nomb);
write('dame la altura');
read(alt);
write('dime la edad');
read(edad); {NO LEE ESTA LINEA Y SALTA AL IF}
if (alt>170) then { DE LA LINEA "DIME TU EDAD" PASA DIRECTO AQUI]
if edad>14 then
write('vaya si eres alto para tu edad');
....
Como lo señale en el comentario el programa no lee el 3er read y lo omite. Lo compile y no ofrece errores de sintaxis y el program corre completo omitiendo esa linea.
No creo que sea un problema de mi lógica ahora, Turbo Pascal 7.0 no permite tantas peticiones juntas? Hay una regla para eso????
AUXILIO!!!!!!!!!!!!!
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:Problemas de lectura

Publicado por Carlos Guimaraenz (265 intervenciones) el 27/10/2006 17:12:23
Hola Susana! a continuación reescribo tu código, modificando lo que me parece incorrecto y señalándolo. También modifico algunas cosas para que se vea más prolijo en pantalla.

begin
write('Dame el nombre: ');
readln(nomb); {uso la instrucción READLN}
write('Dame la altura: ');
readln(alt); {nuevamente uso READLN}
write('Dime la edad: ');
readln(edad);
if (alt>170) then
if (edad>14) then
write('vaya si eres alto para tu edad');
......

Así funciona correctamente. No se cuál es el problema de la instrucción READ en Pascal, pero no cumple con el concepto de dejar el cursor donde se termina de teclear sino que hace salto de línea como lo haría READLN, por lo que yo particularmente te recomiendo que utilices éste último, además provee mayor claridad.

Un beso!
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:Problemas de lectura

Publicado por Susana (3 intervenciones) el 27/10/2006 19:08:40
Hola Carlos!,
Estoy totalmente de acuerdo contigo que asi se lee mejor en pantalla, pero mi profesora queria mostrara todos los datos seguidos y viera la diferencia, por eso el uso de los read . El problema es que no me captura el valor del 3er read (ni con read ni con readln).
Sera problema de mi maquina... del programa....????.
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:Problemas de lectura

Publicado por Carlos Guimaraenz (265 intervenciones) el 27/10/2006 19:26:31
Hola Susana! ¿Podrías mandarme el fuente a mi mail? Lo pruebo y te digo dónde puede estar el problema. Ya te digo lo del problema que tiene la instrucción READ... recuerdo en algún sitio haber leído acerca del tema, pero no recuerdo ni dónde ni cuál era el problema.

Espero el código. Un beso!
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:Problemas de lectura

Publicado por Diego Romero (996 intervenciones) el 28/10/2006 03:42:33
El problema, mi querida Susana, es que tu profesora no ha tenido en cuenta un pequeño detalle.
Asumiré que la variable "nomb" es un string y las variables "alt" y "edad" son integers. Si esto es así entonces el problema está en los tipos de datos que aceptan esas variables.
Para comenzar diré que la tecla ENTER genera un caracter no imprimible, el #13, el cual es válido para ser contenido en un string, pero no lo es para ser contenido en un integer. El #13 también le indica a Read() cuándo terminar con el ingreso de datos. Esto no causa problemas con variables string ya que el caracter #13 va a parar a la variable aunque no se modifique su tamaño.
Me explico mejor, supongamos que en "nomb" ingreso la cadena "Diego", usando Read(), el contenido de "nomb" sería "Diego#13" ("Diego" más el caracter #13) pero el largo de la cadena se mantiene en el correcto es decir 5 ya que el #13 le indica a Read() que allí terminó el ingreso.
Sin embargo con los integers el caracter #13 no es válido y no va a parar a la variable, Read() termina su lectura con el caracter #13 pero NO VACÍA el buffer de teclado, entonces en el próximo Read() el #13 aún está allí y ese nuevo Read() lo toma, como ese caracter indica el final del ingreso pues simplemente hace eso, termina el ingreso, por eso es que "se salta" el tercer Read() en tu programa.
Este efecto no sucede con ReadLn() siempre captura el #13 que genera la tecla ENTER.
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:Problemas de lectura

Publicado por Carlos Guimaraenz (265 intervenciones) el 28/10/2006 04:03:28
Más claro echale agua... Gracias por la explicación Diego, muy clara y concisa... un abrazo!
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:Problemas de lectura

Publicado por susana (3 intervenciones) el 31/10/2006 20:56:05
Hola Diego,
Ciertamente las variables las declare de esa forma. Dejame probar tu solución, pero te comento que ya con anterioridad lo habia hecho.
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:Problemas de lectura

Publicado por Luis (1 intervención) el 19/05/2017 19:48:22
Un consejo muy util, todo el programa roto por poner read y no readln;
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