1

我正在用 C 编写一个代码,该代码应该打印到屏幕上(使用 printf())一个乘法表,其中右下角(表的最大乘积)作为 MaxMult 传递给函数。

例如对于 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

显然,如果您需要打印超过两位数的值,您应该相应地增加字段宽度。

如果您需要在运行时确定而不是在编译时固定的字段宽度,您可以使用:

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 回答