我注意到了之间的本质区别 FPC Read() 和 ReadLn 使用时的功能 standard input 没有很好的文档记录(在Delphi文档中可以阅读)。因此,您的问题的答案如下。
FPC
Read()
ReadLn
standard input
根据 FPC 文档, CRLF , CR 和 LF ,都被认为是 End-Of-Line (EOL) 字符,所以在下面 EOL 代表任何一个。
CRLF
CR
LF
End-Of-Line (EOL)
EOL
的 打电话的时候 Read(s) 强> 哪里 s: string; 程序等待用户输入,直到 EOL 被添加到输入缓冲区。输入字符直到(但不包括) EOL 从缓冲区中删除并传递给 s 。 的 该 EOL 留在输入缓冲区中 强> 。
Read(s)
s: string;
s
接下来打电话给 Read(s) 会马上认出来的 EOL 在输入缓冲区中,不会等待用户输入。该 EOL 继续留在缓冲区,因此没有后续 Read(s) 将等待用户输入。
第一次打电话给 ReadLn(s) 之后 Read(s) 也会马上发现 EOL 在缓冲区而不是等待用户输入。
ReadLn(s)
的 打电话的时候 ReadLn(s) 强> 程序等待(如前面的例子中)用户输入,直到 EOL 被添加到输入缓冲区。输入字符直到(但不包括) EOL 从缓冲区中删除并传递给 s 。 的 那么 EOL 从缓冲区中删除并丢弃 强> 。
接下来打电话给 ReadLn(s) 将再次停止并等待用户输入。
在你的代码中,你正在打电话 Read(n) 在执行的最开始。然后,在 beiras() 你在打电话 ReadLn() 检测到 EOL 在缓冲区中因此立即返回,但也删除了 EOL 来自缓冲区。随后的电话 ReadLn() 现在将等待用户输入。
Read(n)
beiras()
ReadLn()
的 治愈 强> 是不是要改变 Read()n 到了 ReadLn(n) 在你的程序的开头。
Read()n
ReadLn(n)