Ada 具有字符的数组的最大长度

Ada 具有字符的数组的最大长度,ada,Ada,我试图在我的程序中键入一个限制为16个字符的单词。问题是我必须准确地键入16个字符才能进入程序的下一步。我希望能够键入少于16个字符。这是代码的一部分 编辑:不过我还是有点困惑。我没有使用字符串;我使用了一个填充字符的数组,并且添加了SextonTecken\u Type的声明。我做了一些改变,但我仍然有同样的问题。我打不出一个较短的词来向前推进 type SextonTecken_Type is array (1..16) of Character; procedure Gett(A

我试图在我的程序中键入一个限制为16个字符的单词。问题是我必须准确地键入16个字符才能进入程序的下一步。我希望能够键入少于16个字符。这是代码的一部分

编辑:不过我还是有点困惑。我没有使用字符串;我使用了一个填充字符的数组,并且添加了
SextonTecken\u 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;
从,使用;
Last
参数将包含“索引值,以便
Item(Last)
是最后分配的字符。”

增编:

我使用的是一个充满字符的数组

我仍然会使用
Get\u Line
来方便收集字符。例如,您的类型
SextonTecken\u type
是一个类型为
Character
的元素数组。可以将元素从一个阵列复制到另一个阵列:

type SextonTecken_Type is array (1..16) of Character;
Buffer : SextonTecken_Type;
…
for I in 1 .. Last loop
    Buffer(I) := Line(I);
end loop;
或者,将
String
sextontechen_类型
a
子类型
,并使用:

从,使用;
Last
参数将包含“索引值,以便
Item(Last)
是最后分配的字符。”

增编:

我使用的是一个充满字符的数组

我仍然会使用
Get\u Line
来方便收集字符。例如,您的类型
SextonTecken\u type
是一个类型为
Character
的元素数组。可以将元素从一个阵列复制到另一个阵列:

type SextonTecken_Type is array (1..16) of Character;
Buffer : SextonTecken_Type;
…
for I in 1 .. Last loop
    Buffer(I) := Line(I);
end loop;
或者,将
String
sextontechen_类型
a
子类型
,并使用:


你可以这样改变:

-- 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;
——正常子类型索引;要求SextonTecken_类型与字符串不兼容。
子类型指数_范围为正范围1..16;
类型SextonTecken\u type是字符的数组(索引范围);

——Ada 2012风格的动态谓词;子类型与字符串兼容。
子类型SextonTecken_类型为String

使用Dynamic_Predicate=>sextontechen_Type'Length可以这样更改:

-- 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;
——正常子类型索引;要求SextonTecken_类型与字符串不兼容。
子类型指数_范围为正范围1..16;
类型SextonTecken\u type是字符的数组(索引范围);

——Ada 2012风格的动态谓词;子类型与字符串兼容。
子类型SextonTecken_类型为String

使用Dynamic_Predicate=>sextontechen_Type'Length,根据定义,字符串是字符的数组;因此,我认为您可以在
字符串
sextontechen_类型
之间进行类型转换,只要
字符串
长度为16(否则在运行时会出现
约束_错误
),而不是复制每个元素。@ajb只要元素类型和索引类型的基相同,您可以通过显式转换进行转换。
字符串
根据定义是
字符
的数组;因此,我认为您可以在
字符串
sextontechen_类型
之间进行类型转换,只要
字符串
长度为16(否则在运行时会出现
约束_错误
),而不是复制每个元素。@ajb只要元素类型和索引类型的基相同,可以通过显式转换进行转换。
-- Ada 2012 style dynamic predicate; subtype compatible w/ String.
subtype SextonTecken_Type is String
with Dynamic_Predicate => SextonTecken_Type'Length <= 16;