gpt4 book ai didi

io - Ada.Text_IO.End_Of_File 缓冲副作用

转载 作者:行者123 更新时间:2023-12-01 11:11:23 25 4
gpt4 key购买 nike

在多年未接触该语言之后,我正尝试在 Ada 中构建一个 REPL。

如果我检查代码中的 END_OF_FILE,Text_IO 缓冲输入和输出的方式会发生变化。我记得是这种情况,但找不到关于为什么或如何处理这种情况的描述。 (我怀疑这是终端IO和基于文件的IO的区别)

谁能给我指出为什么 Text_IO 以这种方式运行的描述?

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Exceptions; use Ada.Exceptions;
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;


procedure fred is
Buffer: Unbounded_String := Null_Unbounded_String;
L : integer := 0;
begin
-- while (not End_Of_File)
loop
L := L+1;
put("--> ");
Buffer := To_Unbounded_String(Get_Line);
Put_Line(Integer'image(L) & " " & to_String(Buffer));
end loop;
exception
when END_ERROR =>
put_line("");
put_line("Bye ...");
end fred;

按原样运行这段代码给出

--> a
1 a
--> s
2 s
--> d
3 d
-->
Bye ...

如果我取消注释 while 语句,我得到

a
--> 1 a
s
--> 2 s
d
--> 3 d

最佳答案

因为 End_Of_File 需要用户输入,所以只需将它放在您阅读用户输入的地方即可:

loop
L := L + 1;
Put ("--> ");
exit when End_Of_File;
Buffer := To_Unbounded_String (Get_Line);
Put_Line (Integer'Image(L) & " " & To_String (Buffer));
end loop;

关于io - Ada.Text_IO.End_Of_File 缓冲副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59945410/

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