我在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。 (希望我足够清楚......)
任何人都可以告诉我该怎么做?
答案 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");
}