假设我想从终端读取同一行上的三个变量,我想使用read函数.我会用示例输入编写类似下一个代码的内容:
10 929.1 x
var a:integer;
var b:real;
var c:char;
begin
read(a,b,c);
writeln (a, ' ', b, ' ' ,c);
end.
Run Code Online (Sandbox Code Playgroud)
我永远不会读取字符"c".我必须像这样解决它:
var a:integer;
var b:real;
var c:char;
var d:char;
begin
read(a,b,d,c);
writeln (a, ' ', b, ' ' ,c);
end.
Run Code Online (Sandbox Code Playgroud)
现在,char d将读取空格,char c将具有正确的值.
此外,如果我只想读取三个字符,输入必须是"zyx",否则我将不得不使用另一个读取来修复"xy z"的问题.
它与数字完美配合.它将读作"10 9 2"而无需额外读取.
有谁知道这背后的原因?(我用fpc和gpc尝试过)
谢谢
当您读取整数或浮点数时,它首先要跳过空格.然后它读取数字类型的字符,并使文件指针指向下一个字符(第一个不能被认为对您正在读入的数字类型有效).
读取字符时不会跳过空格,因为空格被视为有效字符.
如果你想跳过字符的空格,你需要自己做,例如:
read (a, b, c);
while c = ' ' do begin
read (c);
end
Run Code Online (Sandbox Code Playgroud)
(没有经过考验,并且大大扩展了我的记忆- 我几十年来一直没有做过Pascal的愤怒).
| 归档时间: |
|
| 查看次数: |
1749 次 |
| 最近记录: |