在Ada中打印字符

时间:2011-10-11 21:20:57

标签: string character ada

我声明了这些:

  subtype Num_Char          is Natural 
     range 1 .. Definitions.Page_Width + 1;
  subtype Number_Of_Rows    is Definitions.Number_Of_Rows;
  type Chars                is array (Number_Of_Rows, Num_Char) of Character; 
  The_Chars           : Chars;

使用Ada.Text_IO.Put_Line()将其打印到屏幕的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

假设您要特别使用Ada.Text_IO而不仅仅Put_Line,并假设Number_Of_Rows是一个整数范围,例如Num_Char,那将是

for R in The_Chars'Range (1) loop
   for C in The_Chars'Range (2) loop
      Ada.Text_IO.Put (The_Chars (R, C));
   end loop;
   Ada.Text_IO.New_Line;
end loop;

答案 1 :(得分:2)

Ada中的许多问题实际上都会回到您最初选择的类型。所以个人而言,我建议稍作重写,让你的生活更轻松:

subtype Row is String (1..Definitions.Tote_Page_Width + 1);
type Chars is array (Definitions.Number_Of_Rows) of Row;

现在你可以用以下内容写出来:

for I in The_Chars'range loop
    Ada.Text_IO.Put_Line (The_Chars (I));
end loop;

然而,这里仍然存在很大问题。 Put_Line将打印出所有每行中的字符。 Ada字符串不是以空值终止的,因此如果某些行末尾有未使用的数据,那么它也会被打印出来。

有很多方法可以解决这个问题,但它们与用于处理C字符串的技术截然不同。如果你试图像处理C字符串一样处理Ada字符串,你就会疯狂。

出于这个原因,我非常希望看到您的代码实际上填充 The_Char数据(及其背后的基本原理)。