1

右下隅 (テーブルの最大積) が MaxMult として関数に渡される乗算テーブルを (printf() を使用して) 画面に出力することになっている C のコードを配線しています。

たとえば、MaxMult = 4 の場合、次のように表示されます。

  1  2  3  4

  2  4  6  8

  3  6  9 12

  4  8 12 16

要求は、テーブルが右に揃えられることであり、ここに私の問題があります:

数値ごとに、左側の空白の数が異なります。そして、MaxMult の左側に 1 つの空白しかないという要求に従う必要があるため、他のすべてはそれを参照しています。

最初は変数をprintfに渡すことができるのではないかと考えました。このようなもの:

printf("% Num_Of_Wite_Space d", currNum)

しかし、私はこれを行うことができないようです。

そのため、IT を printf に渡すために、各数値の桁数に応じて長さが異なる空白文字列を生成する方法が必要です。(私が十分に明確であることを願っています..)

誰も私にこれをする方法を教えてもらえますか?

4

3 に答える 3

3

このようなもの:

printf("% Num_Of_Wite_Space d", currNum)

しかし、私はこれを行うことができないようです。

もちろん、これを行うことができます。構文は次のとおりです。

printf("%*d", fieldWidth, currNum);

fieldWidth は (スペース + 数値) の合計幅であることに注意してください。

于 2013-03-13T15:03:22.587 に答える
2

最も簡単な方法は、各値に固定フィールド幅を使用することです。

printf("%3d", a[i][j]);

これにより、フィールド幅が 3 になるように、必要に応じて各出力値の先頭にスペースが埋め込まれます。

1  2  3  4

2  4  6  8

3  6  9 12

4  8 12 16

明らかに、3 桁以上の値を出力する必要がある場合は、それに応じてフィールド幅を大きくする必要があります。

コンパイル時に固定されるのではなく、実行時に決定されるフィールド幅が必要な場合は、次を使用できます。

printf("%*d", field_width, a[i][j]);

詳細については、 man printfを参照してください。

于 2013-03-13T15:01:20.760 に答える
0

それほど難しくありません:

int width = 10; //< number of chars in one column
printf("%*d", width, a[i][j]);

列幅を固定に設定するか、配列から計算された値を使用できます。

int width[COLS];
int a[ROWS][COLS];
int row, col;

... // fill in a and width

for (row = 0; row < ROWS; ++row)
{
    for (col = 0; col < COLS; ++col)
    {
        printf("%*d", width[col], a[row][col]);
    }
    printf("\n");
}
于 2013-03-13T15:15:58.133 に答える