使用“读取pascal中的多个字符”;而不是EoLn“;
我要做的是连续读取字符,并计算大写、小写、数字和空格中的字符数。(我们被告知不要使用字符串) 我的问题是,为什么这个代码不起作用?它不是应该先读取第一个字符,然后再读取第二个字符,直到输入的最后一个字符吗 如何创建一个循环,读取输入中的第一个字符,然后再读取后面的字符,依此类推……当它看到行的结尾时,它应该停止循环使用“读取pascal中的多个字符”;而不是EoLn“;,pascal,Pascal,我要做的是连续读取字符,并计算大写、小写、数字和空格中的字符数。(我们被告知不要使用字符串) 我的问题是,为什么这个代码不起作用?它不是应该先读取第一个字符,然后再读取第二个字符,直到输入的最后一个字符吗 如何创建一个循环,读取输入中的第一个字符,然后再读取后面的字符,依此类推……当它看到行的结尾时,它应该停止循环 program Contadordecaracteres; VAR minusculas,mayusculas,numeros,espacios:integer; c:ch
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.
那么,如何创建一个循环来读取输入中的第一个字符呢
阅读后面的字符,以此类推……当它看到行的结尾时
它应该停止循环
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.
除了一个细节之外,你的程序基本上做了你想要它做的事情。有一个细节没有像您预期的那样工作,即当您按Enter键时(在按下之前的各个键之后),程序会快速运行writeln()
s和readln
,然后终止。我猜你希望程序在这个readln代码>行
使用while not EoLn do
语句,您需要用户按Enter键查看摘要。没关系
而非EoLn do
会看到该按键产生的CR LF
(回车换行),并满意地退出循环,但不会从输入缓冲区中删除CR LF
当执行readln
(在所有writeln
s之后)时,它会在输入缓冲区中看到CR LF
,从缓冲区读取并继续,从而导致程序结束
解决方法是再添加一个readln代码>在您已有的代码之后。然后程序将停止,直到再次按Enter键
那么,如何创建一个循环来读取输入中的第一个字符呢
阅读后面的字符,以此类推……当它看到行的结尾时
它应该停止循环
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.
除了一个细节之外,你的程序基本上做了你想要它做的事情。有一个细节没有像您预期的那样工作,即当您按Enter键时(在按下之前的各个键之后),程序会快速运行writeln()
s和readln
,然后终止。我猜你希望程序在这个readln代码>行
使用while not EoLn do
语句,您需要用户按Enter键查看摘要。没关系
而非EoLn do
会看到该按键产生的CR LF
(回车换行),并满意地退出循环,但不会从输入缓冲区中删除CR LF
当执行readln
(在所有writeln
s之后)时,它会在输入缓冲区中看到CR LF
,从缓冲区读取并继续,从而导致程序结束
解决方法是再添加一个readln代码>在您已有的代码之后。然后程序将停止,直到您再次按Enter键。对于这样的练习,使用传统的Pascal文件io,编写程序以便将文本文件的输入读入字符串变量比从键盘一次读入一个字符更有指导意义。这将指导您进行字符串操作,这是一项基本的必备技能。谷歌自己一个教程,适合你的水平。谢谢你的编辑。我删除了我的否决票和之前的所有评论,因为现在你的问题已经很清楚了。最后也回答了你的问题。如果我的答案是正确的,你可以点击我答案旁边的勾号来标记。对于这样的练习,使用传统的Pascal文件io,编写程序以便将文本文件中的输入读入字符串变量比从键盘一次读入一个字符更有指导意义。这将指导您进行字符串操作,这是一项基本的必备技能。谷歌自己一个教程,适合你的水平。谢谢你的编辑。我删除了我的否决票和之前的所有评论,因为现在你的问题已经很清楚了。最后也回答了你的问题。如果我的答案是正确的,你可以点击我答案旁边的勾号来标记。