我正在尝试在我的程序中键入一个单词,其中限制为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;
答案 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_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;
或者,将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个。