gpt4 book ai didi

Pascal read 函数奇怪的行为

转载 作者:行者123 更新时间:2023-12-02 02:22:36 26 4
gpt4 key购买 nike

假设我想从终端读取同一行的三个变量,并且我想使用 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.

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

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

它对于数字来说工作得非常好。它将读取“10 9 2”,无需额外读取。

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

谢谢

最佳答案

当您读取整数或 float 时,它所做的第一件事就是跳过空格。然后,它读取数字类型的字符,并使文件指针指向下一个字符(第一个对于您正在读取的数字类型来说不能被视为有效的字符)。

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

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

read (a, b, c);
while c = ' ' do begin
read (c);
end

(未经测试,并且极大地扩展了我的内存 - 几十年来我没有在愤怒中做过帕斯卡)。

关于Pascal read 函数奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8997678/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com