Pascal读函数奇怪的行为

Raf*_*ita 3 pascal freepascal

假设我想从终端读取同一行上的三个变量,我想使用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尝试过)

谢谢

pax*_*blo 5

当您读取整数或浮点数时,它首先要跳过空格.然后它读取数字类型的字符,并使文件指针指向下一个字符(第一个不能被认为对您正在读入的数字类型有效).

读取字符时不会跳过空格,因为空格被视为有效字符.

如果你想跳过字符的空格,你需要自己做,例如:

read (a, b, c);
while c = ' ' do begin
    read (c);
end
Run Code Online (Sandbox Code Playgroud)

(没有经过考验,并且大大扩展了我的记忆- 我几十年来一直没有做过Pascal的愤怒).