Распечатка символов в Аде - PullRequest
3 голосов
/ 12 октября 2011

Я объявил:

  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 ]

4 голосов
/ 12 октября 2011

Предполагая, что вы хотите использовать 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 голосов
/ 12 октября 2011

Множество проблем в 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-строк. Если вы попытаетесь работать со строками Ada так же, как со строками C, вы сведете с ума.

По этой причине я бы очень хотел видеть ваш код, который на самом деле заполняет The_Char данными (и обоснованием этого).

...