假设我想在终端的同一行读取三个变量,我想使用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试过了)
由于
答案 0 :(得分:1)
你只需将整个字段作为一个字符串抓取,然后在代码中解析它就会更好。至少可以检查输入,可以防止任何类型不匹配错误。 Read() - 直接进入变量只会导致错误数据的运行时错误。