Pascal读函数奇怪的行为

时间:2012-01-25 04:04:15

标签: 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.

我永远不会读取字符“c”。我必须像这样解决它:

 var a:integer;
 var b:real;
 var c:char;
 var d:char;

 begin

 read(a,b,d,c);

 writeln (a, ' ', b, ' ' ,c);

 end.

现在,char d将读取空格,char c将具有正确的值。

另外,如果我只想读取三个字符,输入必须是“zyx”,否则我将不得不使用另一个读取来修复“x y z”的问题。

它与数字完美配合。它将读作“10 9 2”而无需额外读取。

有人知道这背后的原因吗? (我用fpc和gpc试过了)

由于

1 个答案:

答案 0 :(得分:1)

你只需将整个字段作为一个字符串抓取,然后在代码中解析它就会更好。至少可以检查输入,可以防止任何类型不匹配错误。 Read() - 直接进入变量只会导致错误数据的运行时错误。