Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在Ada中打印字符_String_Character_Ada - Fatal编程技术网

String 在Ada中打印字符

String 在Ada中打印字符,string,character,ada,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

我已宣布:

  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\u IO.Put\u Line()将其打印到屏幕上的最佳方式是什么?

假设您想使用
Ada.Text\u IO
,而不仅仅是
Put\u Line
,并且假设
行数
是一个整数范围,如
Num\u 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;

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_行
将打印出每行中的所有字符。Ada字符串不是以null结尾的,因此如果在某些行的末尾有未使用的数据,也会打印出来

有很多方法可以解决这个问题,但是它们与处理C字符串的方法有很大的不同。如果你试图像处理C字符串那样处理Ada字符串,你会发疯的


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

为什么每行的字符数比定义的
页面宽度多一个?
?好问题。。不确定(取自一些现有代码)