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

C 生成可变长度的空白字符数组,c,printf,space,C,Printf,Space,我正在用C编写一个代码,它应该使用printf将乘法表打印到屏幕上,在乘法表的右下角,表的最大乘积作为MaxMult传递给函数 例如,对于MaxMult=4,它应该打印: 1 2 3 4 2 4 6 8 3 6 9 12 4 8 12 16 要求桌子向右对齐,这是我的问题: 对于每个数字,其左侧空白的数量是不同的。 因为我需要它来满足MaxMult左边只有一个空格的要求,所以其他所有的东西都和它有关 起初我想也许我可以把一个变量传递给printf。大概是

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

例如,对于MaxMult=4,它应该打印:

  1  2  3  4

  2  4  6  8

  3  6  9 12

  4  8 12 16
要求桌子向右对齐,这是我的问题:

对于每个数字,其左侧空白的数量是不同的。 因为我需要它来满足MaxMult左边只有一个空格的要求,所以其他所有的东西都和它有关

起初我想也许我可以把一个变量传递给printf。大概是这样的:

printf("% Num_Of_Wite_Space d", currNum)
但我似乎无法做到这一点

所以现在我需要一种方法来生成一个空格字符串,根据每个数字的位数不同长度不同,以便将其传递给printf。 希望我足够清楚


有人能告诉我怎么做吗?

最简单的方法是对每个值使用固定的字段宽度,例如

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]);

有关更多详细信息,请参阅。

最简单的方法是对每个值使用固定的字段宽度,例如

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]);
有关更多详细信息,请参阅

大概是这样的:

printf("% Num_Of_Wite_Space d", currNum)
printf%Num\u,其中有空格d,currNum

但我似乎无法做到这一点

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

printf("%*d", fieldWidth, currNum);
请注意,fieldWidth是空格的总宽度+数字

大概是这样的:

printf("% Num_Of_Wite_Space d", currNum)
printf%Num\u,其中有空格d,currNum

但我似乎无法做到这一点

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

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

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

这并不难:

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");
}

这并不太难:

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");
}

这不适用于右下角的最终值大于2位的情况。@unwind:true-这只是这个特定情况的一个示例-我现在更新了答案,以涵盖不同的字段宽度以及在运行时而不是编译时指定的字段宽度。这不适用于最终值为右下角的值大于2位。@unwind:true-这只是这个特殊情况的一个示例-我现在更新了答案,以涵盖不同的字段宽度以及在运行时而不是编译时指定的字段宽度。