gpt4 book ai didi

Pascal - 读/读函数杂质?

转载 作者:行者123 更新时间:2023-12-03 21:30:37 29 4
gpt4 key购买 nike

我真的很感兴趣——你为什么要放

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 读取一个字符,但仍然期望在返回之前按下 Enter,即使它只返回 1 个字符。您在输入 1 后按 Enter,控制台用 CR (ASCII 0xd) 和 LF (ASCII 0xa) 填充键盘缓冲区。 (在 Linux/UNIX 系统上,Make your choise 只会出现两次,因为 UNIX 只使用 LF 作为换行符)。您可以通过打印使用 ord(CH) (iirc) 接收到的字符值来查看这些内容。

第二个程序将 CRLF 组合与随后的 readln 一起从键盘缓冲区中拉出并丢弃它,因此它的行为符合您的要求。

如果这是一个一次性程序,只需通过 readln 执行它,然后继续解决您正在处理的任何更重要的问题。如果它注定要用于生产,则通过围绕 readkey 的某种循环构建输入函数(在一个字符后立即返回)。

谢谢你的怀旧。

关于Pascal - 读/读函数杂质?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5693186/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com