带字符的数组的最大长度

时间:2015-06-07 11:01:18

标签: ada

我正在尝试在我的程序中键入一个单词,其中限制为16个字符。问题是我必须输入正好16个字符才能继续我的程序中的下一步。我希望能够键入少于16个字符。这是代码的一部分。

编辑:我仍然有点困惑。我没有使用字符串;我正在使用一个充满字符的数组,并且我添加了SextonTecken_Type的声明。我做了一些改变,但我仍然有同样的问题。我不能输入一个较短的单词来推进。

type SextonTecken_Type is
    array (1..16) of Character;

procedure Gett(A: out SextonTecken_Type; N: in Integer) is      
begin
    Put("Type a string (max. 16 characters): ");  
    for I in 1..16 loop
        Get(A(I));
        if N=16 then
            Skip_Line;
        end if;
    end loop;
end Gett;

2 个答案:

答案 0 :(得分:4)

Ada.Text_IO开始,使用Get_Line; Last参数将包含"索引值,以便Item(Last)是指定的最后一个字符。"

with Ada.Text_IO;
…
Line : String (1 .. 16);
Last : Natural;
…
Ada.Text_IO.Get_Line (Line, Last);
Ada.Text_IO.Put_Line (Line(1 .. Last));

附录:

  

我使用的是填充了字符的数组。

为方便收集字符,我仍然使用Get_Line。与String类似,您的类型SextonTecken_TypeCharacter类型的元素数组。您可以将元素从一个数组复制到另一个数组:

type SextonTecken_Type is array (1..16) of Character;
Buffer : SextonTecken_Type;
…
for I in 1 .. Last loop
    Buffer(I) := Line(I);
end loop;

或者,将SextonTecken_Type设为subtype String并使用assignment

subtype SextonTecken_Type is String (1 .. 16);
Buffer : SextonTecken_Type;
…
Buffer(1 .. Last) := Line(1 .. Last);
Ada.Text_IO.Put_Line(Buffer(1 .. Last));

答案 1 :(得分:1)

嗯,你可以改变这样的事情:

-- Normal subtype indexing; requires SextonTecken_Type to be incompatible w/ String.
subtype Index_Range is Positive range 1..16;
type SextonTecken_Type is array (Index_Range range <>) of Character;

-- Ada 2012 style dynamic predicate; subtype compatible w/ String.
subtype SextonTecken_Type is String
with Dynamic_Predicate => SextonTecken_Type'Length <= 16;

这样可以确保字符串SextonTecken_Type的长度不超过16个。