我真的很感兴趣-为什么您需要放
readln;
从键盘读取一些值到变量后的行?例如,
repeat
writeln('Make your choise');
read(CH);
if (CH = '1') then begin
writeln('1');
end;
{ ... }
until CH = 'q';
如果运行以下代码,然后在键盘上按“ 1”,则输出如下
1
Make your choise
Make your choise
Make your choise
另一方面,如果您添加“ readln;”行,一切都完美:
repeat
writeln('Make your choise');
read(CH);
readln;
if (CH = '1') then begin
Writeln('1');
end
until CH = 'q';
我唯一的猜测是,不带参数调用readln会终止读取键盘输入的过程。但是如果是这样,为什么read / readln函数不能自己停止读取输入,以避免这种笨拙?
最佳答案
read
读取一个字符,但是即使返回的只是1个字符,仍希望在返回之前按下Enter键。您在1之后按Enter,控制台将用CR
(ASCII 0xd)和LF
(ASCII 0xa)填充键盘缓冲区。 (在Linux / UNIX系统上,Make your choise
仅会出现两次,因为UNIX仅使用LF
作为其换行字符)。您可以通过打印用ord(CH)
(iirc)接收的字符的值来查看这些内容。
第二个程序是将CRLF组合与随后的readln
一起从键盘缓冲区中拉出并丢弃,因此它的行为就像您想要的那样。
如果这是一个一次性程序,只需通过readln
进行操作,然后继续解决您正在处理的更重要的问题。如果要用于生产,请通过围绕readkey
的某种循环构建输入函数(该循环在一个字符后立即返回)。
感谢您的怀旧。