Problema con Pascal

Hola, el problema que tengo pasa con cualquier programa que haga, pongo un ejemplo fácil para mostrarles.

program contarcaracteres;

var

cant:integer;

letra:char;

begin

cant:=0;

read(letra);

while(letra<>'!')do begin

cant:=cant+1;

read(letra);

end;

writeln('la cantidad de caracteres leídos es:',cant);

writeln('presione la tecla "enter" para finalizar...');

readln;

end.

Bueno en la parte de writeln abajo no me informa ni los caracteres leídos, ni me dice que presione enter,, osea si aparece pero no me lo muestra, si yo después de finalizar el programa pongo user screen para ver que fue lo ultimo que paso aparece todo, la cantidad de caracteres leídos y el presione la tecla enter para finalizar.

Espero que me puedan ayudar :D

1 Respuesta

Respuesta
1

El problema es que al utilizar read y no readln para leer las variables, no vacías el buffer del teclado y se produce un salto. Esto lo puedes arreglar de varias formas. Una es incluyendo dos readln consecutivos al final del programa. Yo te recomendaría que para leer variables usaras readln y dejaras read sólo para el tratamiento de ficheros.

Tu programa podría quedar como sigue:

program contarcaracteres;
var
cant:integer;
letra:char;
begin
cant:=0;
read(letra);
while(letra<>'!')do begin
cant:=cant+1;
read(letra);
end;
writeln('la cantidad de caracteres leídos es:',cant);
writeln('presione la tecla "enter" para finalizar...');
readln;

readln; {este segundo readln produciría la pausa}
end

Yo lo solucioné de otra forma. Te lo dejo aquí por si te interesa:

program contarcaracteres;
Uses crt;
var
cant:integer;
letra:char;
begin
cant:=0;
letra:=readkey;
write(letra);
while(letra<>'!')do begin
cant:=cant+1;
letra:=readkey;
write(letra);
end;
writeln('la cantidad de caracteres leídos es:',cant);
writeln('presione la tecla "enter" para finalizar...');
readln;
end.

Te agradecería que cuando ves mi respuesta, si te resulta útil, finalices la pregunta dándole la calificación que creas conveniente. Si no es así y tienes alguna otra duda, vuelve a postear.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas