使用 "while not EoLn" 在 Pascal 中读取多个字符
read multiple char in pascal using "while not EoLn"
我要做的是连续读取字符,统计大写、小写、数字、space的字符个数。 (我们被告知不要使用字符串)。
我的问题是,为什么这段代码不起作用?难道不是应该读取第一个字符然后读取第二个字符直到输入的最后一个字符吗?
我如何制作一个循环来读取输入中的第一个字符,然后读取后面的字符等等...当它看到行尾时应该停止循环。
program Contadordecaracteres;
VAR
minusculas,mayusculas,numeros,espacios:integer;
c:char;
begin
minusculas:= 0;
mayusculas:= 0;
numeros:= 0;
espacios:= 0;
writeln('Escriba algo');
while not EoLn do
begin
read(c);
case c of
' ': espacios:= espacios+1;
'0'..'9': numeros:= numeros+1;
'A'..'Z': mayusculas:= mayusculas+1;
'a'..'z': minusculas:= minusculas+1;
end; //end of case
end; // end of while
writeln('Mayusculas: ', mayusculas);
writeln('Minusculas: ', minusculas);
writeln('Numeros: ', numeros);
writeln('Espacios: ', espacios);
readln;
end.
How can I make a loop that reads the 1st character in the input then
read the character after that and so on...when it sees the end of line
it should stop the loop.
除了一个细节外,您的程序基本上按照您的意愿执行。一个细节不符合您的预期,是当您按 Enter(在此之前按下各种键之后)时,程序会快速运行 writeln()
s和 readln
然后终止。我猜您希望程序在 readln;
行停止。
对于 while not EoLn do
语句,您需要用户按 Enter 来查看摘要。没关系。
while not EoLn do
看到该按键产生的 CR LF
(回车 Return 换行)并满足于退出循环, 但没有从输入缓冲区 .
中删除 CR LF
当执行readln
(在所有writeln
s之后)时,它在输入缓冲区中看到CR LF
,从缓冲区中读取它并继续,这导致结束程序。
治疗方法是在已有的之后再添加一个 readln;
。然后程序将停止,直到您再次按 Enter.
我要做的是连续读取字符,统计大写、小写、数字、space的字符个数。 (我们被告知不要使用字符串)。
我的问题是,为什么这段代码不起作用?难道不是应该读取第一个字符然后读取第二个字符直到输入的最后一个字符吗?
我如何制作一个循环来读取输入中的第一个字符,然后读取后面的字符等等...当它看到行尾时应该停止循环。
program Contadordecaracteres;
VAR
minusculas,mayusculas,numeros,espacios:integer;
c:char;
begin
minusculas:= 0;
mayusculas:= 0;
numeros:= 0;
espacios:= 0;
writeln('Escriba algo');
while not EoLn do
begin
read(c);
case c of
' ': espacios:= espacios+1;
'0'..'9': numeros:= numeros+1;
'A'..'Z': mayusculas:= mayusculas+1;
'a'..'z': minusculas:= minusculas+1;
end; //end of case
end; // end of while
writeln('Mayusculas: ', mayusculas);
writeln('Minusculas: ', minusculas);
writeln('Numeros: ', numeros);
writeln('Espacios: ', espacios);
readln;
end.
How can I make a loop that reads the 1st character in the input then read the character after that and so on...when it sees the end of line it should stop the loop.
除了一个细节外,您的程序基本上按照您的意愿执行。一个细节不符合您的预期,是当您按 Enter(在此之前按下各种键之后)时,程序会快速运行 writeln()
s和 readln
然后终止。我猜您希望程序在 readln;
行停止。
对于 while not EoLn do
语句,您需要用户按 Enter 来查看摘要。没关系。
while not EoLn do
看到该按键产生的 CR LF
(回车 Return 换行)并满足于退出循环, 但没有从输入缓冲区 .
CR LF
当执行readln
(在所有writeln
s之后)时,它在输入缓冲区中看到CR LF
,从缓冲区中读取它并继续,这导致结束程序。
治疗方法是在已有的之后再添加一个 readln;
。然后程序将停止,直到您再次按 Enter.