我无法编译这个程序,因为它似乎不会在Put_Line方法中打印整数变量和字符串。我已经在线查看了源代码,当它们这样做时它可以工作,所以我哪里出错了。谢谢你的帮助。
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
procedure MultiplicationTable is
procedure Print_Multiplication_Table(Number :in Integer; Multiple :in Integer) is
Result : Integer;
begin
for Count in 1 ..Multiple
loop
Result := Number * Count;
Put_Line(Number & " x " & Count & " = " & Result);
end loop;
end Print_Multiplication_Table;
Number : Integer;
Multiple : Integer;
begin
Put("Display the multiplication of number: ");
Get(Number);
Put("Display Multiplication until number: ");
Get(Multiple);
Print_Multiplication_Table(Number,Multiple);
end MultiplicationTable;`
答案 0 :(得分:10)
问题是你正在使用&用字符串和整数。 请尝试以下方法之一:
使用Number
Integer'Image(Number)
或者将Put_Line
分解为您想要的组件;例如:
-- Correction to Put_Line(Number & " x " & Count & " = " & Result);
Put( Number );
Put( " x " );
Put( Count );
Put( " = " );
Put( Result);
New_Line(1);
答案 1 :(得分:5)
您已经拥有with
的{{1}}和use
条款,但您实际上并未使用它。
改变这个:
Ada.Integer_Text_IO
到此:
Put_Line(Number & " x " & Count & " = " & Result);
(我通常不会在一行上放置多个语句,但在这种情况下它是有意义的。)
请注意Put(Number); Put(" x "); Put(Count); Put(" = "); Put(Result); New_Line;
以非空的整数为前缀,我总是觉得非常烦人; Integer'Image
不这样做(除非你要求)。
你可以定义重载的Ada.Integer_Text_IO.Put
函数,如下所示:
"&"
会使您的原始function "&"(Left: String; Right: Integer) return String is
begin
return Left & Integer'Image(Right);
end "&";
function "&"(Left: Integer; Right: String) return String is
begin
return Integer'Image(Left) & Right;
end "&";
来电有效,但多次Put_Line
来电可能是更好的风格。
答案 2 :(得分:3)
试试这个:
Put_Line(Integer'Image(Number) & " x " & Integer'Image(Count) & " = " & Integer'Image(Result));
答案 3 :(得分:0)
基于Keith Thompson的答案(以及另一个问题中的评论),这是一个完整的Ada程序,可以使用&
输出Put_Line
的字符串和整数,但没有空格否则Integer'Image
会先于:
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
procedure Main is
function lstrip(S: String) return String is
begin
if S(S'First) = ' ' then
return S(S'First+1 .. S'Last);
else
return S;
end if;
end;
function "&"(Left: String; Right: Integer) return String is
begin
return Left & lstrip(Integer'Image(Right));
end "&";
function "&"(Left: Integer; Right: String) return String is
begin
return lstrip(Integer'Image(Left)) & Right;
end "&";
begin
Put_Line("x=" & 42);
end Main;