我真的很感兴趣 - 为什么你需要把
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 会终止读取键盘输入的过程。但如果是这样,为什么读取/读取功能不能自行停止读取输入,以避免这种笨拙?
答案 0 :(得分:7)
read
读取一个字符,但仍然希望在返回之前按下Enter,即使它只返回1个字符。你在1之后按Enter键,控制台正在用CR
(ASCII 0xd)和LF
(ASCII 0xa)填充键盘缓冲区。 (在Linux / UNIX系统上,Make your choise
仅出现两次,因为UNIX仅使用LF
作为其换行符。您可以通过打印使用ord(CH)
(iirc)收到的字符值来查看这些内容。
第二个程序是将CRLF组合从后面的readln
拉出键盘缓冲区并丢弃它,因此它的行为方式与你想要的一样。
如果这是一次性计划,只需通过readln
进行,然后继续解决您正在处理的任何更重要的问题。如果它用于生产,则通过readkey
周围的某种循环(在一个字符后立即返回)构建一个输入函数。
感谢怀旧。