在Ada中打印字符

3

我有以下声明:

  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()最好的方式是将其打印到屏幕上。

1
为什么每行字符数比定义的“Tote_Page_Width”多一个? - Simon Wright
好问题.. 不太确定(从某些现有代码中获取) - mainstringargs
2个回答

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;

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的代码(以及背后的原理)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接