作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我真的很感兴趣——你为什么要放
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/
我是一名优秀的程序员,十分优秀!