c - 使用 printf 打印二维数组的等距元素
问题描述
我正在尝试打印一个 2d 数组,该数组最多有 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
?
解决方案
这个给你。
#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]
推荐阅读
- sql-server - 重复 ID 不是行 ID
- amazon-web-services - 每次添加消息时 AWS Dead Letter Queue Cloudwatch 警报
- javascript - VueJs - 将字符串放在 img src 属性中
- wordpress - 损坏的分类链接 WordPress
- perl - 在 perl 中声明匿名数组集
- javascript - 一步减少和排序对象数组
- amazon-web-services - Kinesis 和 SQS 有什么区别?
- ruby - Ruby条件不在reduce方法内部触发
- excel - 使用 VBA 复制列并粘贴为值时出错
- javascript - 如何使用 JQuery 根据文本值将不同的属性分配给同一类的多个元素