16

このプログラムをコンパイルできません。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;`
4

4 に答える 4

13

問題は、文字列と整数で&を使用していることです。次のいずれかを試してください。

Numberputのパラメータ内を次のように置き換えます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);
于 2011-12-21T20:10:33.070 に答える
5

には既にwithanduseAda.Integer_Text_IOがありますが、実際には使用していません。

これを変える:

Put_Line(Number & " x " & Count & " = " & Result);

これに:

Put(Number); Put(" x "); Put(Count); Put(" = "); Put(Result); New_Line;

(通常、1 行に複数のステートメントを入れることはありませんが、この場合は理にかなっています。)

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呼び出しが有効になりますが、複数のPut呼び出しはおそらくより良いスタイルです。

于 2011-12-21T21:29:05.033 に答える
4

これを試して:

Put_Line(Integer'Image(Number) & " x " & Integer'Image(Count) & " = " & Integer'Image(Result));
于 2011-12-21T20:09:15.427 に答える