生成可变长度的空白字符数组

时间:2013-03-13 14:59:14

标签: c printf space

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

例如,对于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。 (希望我足够清楚......)

任何人都可以告诉我该怎么做?

3 个答案:

答案 0 :(得分:3)

  

类似的东西:

     

printf("% Num_Of_Wite_Space d", currNum)

     

但我似乎无法做到这一点。

当然你可以这样做。语法是:

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

请注意,fieldWidth是(空格+数字)的总宽度。

答案 1 :(得分: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

答案 2 :(得分: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");
}