字符串(1..10)的数组(1..5)的ada get_line

时间:2018-08-03 17:40:50

标签: arrays loops ada getline

我有问题。 我制作了一个字符串数组,因为我想在数组中存储一些名称。
问题是,当我将名字写的短10个字符时,程序会使用最多10个随机字符填充数组。我不知道该如何解决。我已经尝试过GTX1070,但仍然无法正常使用。 (问题出在考试中,我们假设该考试在左轮手枪上存储了5个名字:)。)

这是代码

Ada.Text_IO.Skip_Line

2 个答案:

答案 0 :(得分:1)

您可以通过用空格字符填充字符串来初始化来解决问题。 -除了将Get_Line指定为具有Item作为out参数之外。 -坚持使用空格填充的定长字符串:

declare
   Buffer    : String (1 .. 20);
   Filled_To : Natural;
begin
   Ada.Text_IO.Get_Line (Item => Buffer,
                         Last => Filled_To);
   Buffer (Filled_To + 1 .. Buffer'Last) := (others => ' ');
end;

另一种选择是跟踪实际长度,并在再次打印出名称时仅显示该长度。

第三个选择是使用Ada.Strings.Bounded,它为您处理长度的记录。

第四个选择是使用Ada.Strings.Unbounded,它使用动态分配根据您的需要调整存储字符串的长度。

从您的问题描述中尚不清楚哪种解决方案是正确的,但第一种是最容易实现的。

答案 1 :(得分:1)

好吧,您看到的是类型定义的结果:

 type Pistol is array (1..5) of String(1..10);

看,您要声明一个由五个元素组成的数组,这些元素是长度为10的字符串。

已经有人提到了有界和无界字符串,但是也许您应该看一下Ada.Containers.Indefinite_Holders,用String实例化它,并对该容器进行数组化。