使用 printf 打印二维数组的等间距元素
print equally spaced elements of a 2D array with printf
我正在尝试打印一个二维数组,该数组最多包含 3 位数字,这些数字在打印时对齐。例如,对于一个简单的 printf
,它看起来像这样:
[0, 232, 20, 96, 176, 0, 0]
[0, 0, 24, 0, 0, 176, 0]
[0, 0, 0, 0, 0, 0, 0]
我希望打印时所有逗号沿列对齐并带有额外的空格,如下所示:
[ 0, 232, 20, 96, 176, 0, 0]
[ 0, 0, 24, 0, 0, 176, 0]
[ 0, 0, 0, 0, 0, 0, 0]
如何使用 printf
执行此操作?
使用 printf
printf("%4d", arr[i][j]);
这种格式
int main()
{
int arr[3][7] = { {0, 232, 20, 96, 176, 0, 0}
,{0, 0, 24, 0, 0, 176, 0}
,{0, 0, 0, 0, 0, 0, 0} };
for (int i = 0; i < 3; i++)
{
printf("[");
for (int j = 0; j < 7; j++)
{
if (j < 6)
printf("%4d,", arr[i][j]);
if (j == 6)
printf("%4d", arr[i][j]);
}
printf("]");
printf("\n");
}
}
PS:space的数量可以根据需要改变,随着"%4d"
的改变。
给你。
#include <stdio.h>
int main(void)
{
enum { M = 3, N = 7 };
int a[M][N] =
{
{ 0, 232, 20, 96, 176, 0, 0 },
{ 0, 0, 24, 0, 0, 176, 0 },
{ 0, 0, 0, 0, 0, 0, 0 }
};
int width = 4;
for ( size_t i = 0; i < M; i++ )
{
putchar( '[' );
for ( size_t j = 0; j < N; j++ )
{
if ( j != 0 ) putchar( ',' );
printf( "%*d", width, a[i][j] );
}
printf( "]\n" );
}
putchar( '\n' );
return 0;
}
程序输出为
[ 0, 232, 20, 96, 176, 0, 0]
[ 0, 0, 24, 0, 0, 176, 0]
[ 0, 0, 0, 0, 0, 0, 0]
您可以更改变量 width
的值,例如,如果您想要输出比由 3 位数字组成的值更大的值。即输出足够灵活。
如果您想将数组输出放在一个单独的函数中,那么如果编译器支持可变长度数组,则相应的函数可以按以下方式查看。
#include <stdio.h>
void format_output( size_t m, size_t n, int a[m][n], int width )
{
for ( size_t i = 0; i < m; i++ )
{
putchar( '[' );
for ( size_t j = 0; j < n; j++ )
{
if ( j != 0 ) putchar( ',' );
printf( "%*d", width, a[i][j] );
}
printf( "]\n" );
}
}
int main(void)
{
enum { M = 3, N = 7 };
int a[M][N] =
{
{ 0, 232, 20, 96, 176, 0, 0 },
{ 0, 0, 24, 0, 0, 176, 0 },
{ 0, 0, 0, 0, 0, 0, 0 }
};
int width = 4;
format_output( M, N, a, width );
putchar( '\n' );
return 0;
}
程序输出与上图相同,即
[ 0, 232, 20, 96, 176, 0, 0]
[ 0, 0, 24, 0, 0, 176, 0]
[ 0, 0, 0, 0, 0, 0, 0]
您可以使用 width 前缀指定 printf
转换的最小宽度:printf("%4d", x);
将打印 int
变量 x
用足够的空格填充到左侧以产生至少 4 个字符。
如果您知道数组中任意数字的最大宽度,则可以在格式字符串中对该数字进行硬编码。否则,您可以计算所需的宽度并使用 %*d
并传递一个额外的参数来指定计算出的宽度。
这是修改后的版本:
#include <stdio.h>
int main(void) {
#define M 3
#define N 7
int a[M][N] = {
{ 0, 232, 20, 96, 176, 0, 0 },
{ 0, 0, 24, 0, 0, 176, 0 },
{ 0, 0, 0, 0, 0, 0, 0 },
};
int width = 0;
/* compute the required width */
for (size_t i = 0; i < M; i++) {
for (size_t j = 0; j < N; j++) {
int w = snprintf(NULL, 0, "%d", a[i][j]);
if (width < w) {
width = w;
}
}
}
/* print the arrays */
for (size_t i = 0; i < M; i++) {
printf("[");
for (size_t j = 0; j < N; j++) {
if (j != 0) printf(", ");
printf("%*d", width, a[i][j]);
}
printf("]\n");
}
return 0;
}
输出:
[ 0, 232, 20, 96, 176, 0, 0]
[ 0, 0, 24, 0, 0, 176, 0]
[ 0, 0, 0, 0, 0, 0, 0]
我正在尝试打印一个二维数组,该数组最多包含 3 位数字,这些数字在打印时对齐。例如,对于一个简单的 printf
,它看起来像这样:
[0, 232, 20, 96, 176, 0, 0]
[0, 0, 24, 0, 0, 176, 0]
[0, 0, 0, 0, 0, 0, 0]
我希望打印时所有逗号沿列对齐并带有额外的空格,如下所示:
[ 0, 232, 20, 96, 176, 0, 0]
[ 0, 0, 24, 0, 0, 176, 0]
[ 0, 0, 0, 0, 0, 0, 0]
如何使用 printf
执行此操作?
使用 printf
printf("%4d", arr[i][j]);
int main()
{
int arr[3][7] = { {0, 232, 20, 96, 176, 0, 0}
,{0, 0, 24, 0, 0, 176, 0}
,{0, 0, 0, 0, 0, 0, 0} };
for (int i = 0; i < 3; i++)
{
printf("[");
for (int j = 0; j < 7; j++)
{
if (j < 6)
printf("%4d,", arr[i][j]);
if (j == 6)
printf("%4d", arr[i][j]);
}
printf("]");
printf("\n");
}
}
PS:space的数量可以根据需要改变,随着"%4d"
的改变。
给你。
#include <stdio.h>
int main(void)
{
enum { M = 3, N = 7 };
int a[M][N] =
{
{ 0, 232, 20, 96, 176, 0, 0 },
{ 0, 0, 24, 0, 0, 176, 0 },
{ 0, 0, 0, 0, 0, 0, 0 }
};
int width = 4;
for ( size_t i = 0; i < M; i++ )
{
putchar( '[' );
for ( size_t j = 0; j < N; j++ )
{
if ( j != 0 ) putchar( ',' );
printf( "%*d", width, a[i][j] );
}
printf( "]\n" );
}
putchar( '\n' );
return 0;
}
程序输出为
[ 0, 232, 20, 96, 176, 0, 0]
[ 0, 0, 24, 0, 0, 176, 0]
[ 0, 0, 0, 0, 0, 0, 0]
您可以更改变量 width
的值,例如,如果您想要输出比由 3 位数字组成的值更大的值。即输出足够灵活。
如果您想将数组输出放在一个单独的函数中,那么如果编译器支持可变长度数组,则相应的函数可以按以下方式查看。
#include <stdio.h>
void format_output( size_t m, size_t n, int a[m][n], int width )
{
for ( size_t i = 0; i < m; i++ )
{
putchar( '[' );
for ( size_t j = 0; j < n; j++ )
{
if ( j != 0 ) putchar( ',' );
printf( "%*d", width, a[i][j] );
}
printf( "]\n" );
}
}
int main(void)
{
enum { M = 3, N = 7 };
int a[M][N] =
{
{ 0, 232, 20, 96, 176, 0, 0 },
{ 0, 0, 24, 0, 0, 176, 0 },
{ 0, 0, 0, 0, 0, 0, 0 }
};
int width = 4;
format_output( M, N, a, width );
putchar( '\n' );
return 0;
}
程序输出与上图相同,即
[ 0, 232, 20, 96, 176, 0, 0]
[ 0, 0, 24, 0, 0, 176, 0]
[ 0, 0, 0, 0, 0, 0, 0]
您可以使用 width 前缀指定 printf
转换的最小宽度:printf("%4d", x);
将打印 int
变量 x
用足够的空格填充到左侧以产生至少 4 个字符。
如果您知道数组中任意数字的最大宽度,则可以在格式字符串中对该数字进行硬编码。否则,您可以计算所需的宽度并使用 %*d
并传递一个额外的参数来指定计算出的宽度。
这是修改后的版本:
#include <stdio.h>
int main(void) {
#define M 3
#define N 7
int a[M][N] = {
{ 0, 232, 20, 96, 176, 0, 0 },
{ 0, 0, 24, 0, 0, 176, 0 },
{ 0, 0, 0, 0, 0, 0, 0 },
};
int width = 0;
/* compute the required width */
for (size_t i = 0; i < M; i++) {
for (size_t j = 0; j < N; j++) {
int w = snprintf(NULL, 0, "%d", a[i][j]);
if (width < w) {
width = w;
}
}
}
/* print the arrays */
for (size_t i = 0; i < M; i++) {
printf("[");
for (size_t j = 0; j < N; j++) {
if (j != 0) printf(", ");
printf("%*d", width, a[i][j]);
}
printf("]\n");
}
return 0;
}
输出:
[ 0, 232, 20, 96, 176, 0, 0]
[ 0, 0, 24, 0, 0, 176, 0]
[ 0, 0, 0, 0, 0, 0, 0]