3

到目前为止我的代码。但是它不起作用。我希望能够写出诸如“go”、“car”或“truck”之类的东西,只要它不超过 5 个字符,然后程序会写出那个词。我想我需要使用 Get_Line 和 Put_Line 但我不知道如何使用它们。

with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;

procedure Ada_O1_1 is
   
   I : Integer;
   S : String(1..5);

begin
   Put("Write a string with a maximum of 5 characters: ");
   Get(S, Last =>I);
   Put("You wrote the string: ");
   Put(S(1..I));
end Ada_O1_1;
4

2 回答 2

2

Get_Line 返回一个可变长度的 String 结果,并且 Ada 要求 String 对象在实例化时具有已知的大小。解决此问题的方法是使用 Get_Line 结果初始化 String 变量。您可以在声明块中执行此操作:

declare
   Line : String := Get_Line;
begin
   -- Do stuff here like check the length of the Line variable and
   -- adjust how your code works based on that.  Note that the Line
   -- variable goes out of scope once you leave the block (after "end")
end;

在块的开始/结束部分,您可以检查返回的行的长度并验证它是否小于或等于 5,并根据该结果进行错误处理。

于 2022-01-20T02:15:35.270 回答
1

我把它放在一个循环的形式中,(a) 使它使用起来稍微容易一些,(b) 增加了处理空输入和超长输入的需要。

with Ada.Text_IO; use Ada.Text_IO;

procedure Ada_O1_1 is

   I : Integer;
   S : String (1 .. 5);

begin
   loop
      Put ("Write a string with a maximum of 5 characters (end with <RET>): ");
      Get_Line (S, Last => I);
      exit when I = 0;  -- i.e. an empty line
      if I = S'Last then
         --  there are still characters in the input buffer
         Skip_Line;
      end if;
      Put ("You wrote the string: ");
      Put_Line (S (1 .. I));
   end loop;
end Ada_O1_1;
于 2022-01-20T13:41:52.483 回答