我有问题。
我制作了一个字符串数组,因为我想在数组中存储一些名称。
问题是,当我将名字写的短10个字符时,程序会使用最多10个随机字符填充数组。我不知道该如何解决。我已经尝试过GTX1070
,但仍然无法正常使用。
(问题出在考试中,我们假设该考试在左轮手枪上存储了5个名字:)。)
这是代码
Ada.Text_IO.Skip_Line
答案 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
实例化它,并对该容器进行数组化。