Ada I/O:Put_Line 在 Get_Line 之后不工作

Ada I/O: Put_Line not working after Get_Line

我正在尝试在 Ada 中做基本的 I/O,但是这方面的文档提供的信息不多(除非我去错地方了)。在接下来的块中,我试图测试字符串附加和输出,但由于某种原因它实际上只输出 "Hello WORLD!" 我确定我错过了一些非常简单的东西,但我已经尝试了几个小时把这个想出来(解决;计算出;弄明白。

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


procedure Main is

     usrIn : String(1..80);
     appendString : Unbounded_String;
     last : Natural;

begin
     Put_Line ("Hello WORLD!");
     Get_Line(usrIn, last);
     Put_Line ("AAAAAAAA");
     appendString := To_Unbounded_String("USER IN: ");
     Append(appendString,usrIn);
     Put_Line("Output follows");
     Put_Line(To_String(appendString));

end Main;

usrIn 是一个 String(1..80),即 80 个字符的数组。

这一行:

Append(appendString,usrIn);

将所有 80 个字符(其中大部分可能是垃圾)附加到 appendString

这就是 Get_Linelast 参数的用途。

userIn 替换为 userIn(userIn'First .. last)。这是一个仅由 Get_Line 调用读取的字符组成的切片。

如果使用Ada 2005以上的版本编译,也可以使用Get_Line的函数形式:

declare
    usrIn : constant String := Get_Line;
begin
    Append(appendString,usrIn);
end;