C中可变长度的列

时间:2016-09-11 14:47:11

标签: c printf

我正在尝试使用2D int数组在C中创建图形表。这一切都很好,但问题是如果整数的长度不同,表格看起来不再好看了。这是一个例子:

$data = 'Your real data which you want to send in url  ' ; than use in array .

不好

[ 198 ] [  2  ] [34313]
[  4  ] [  54 ] [  6  ]
[  7  ] [ 888 ] [  9  ]

我想出的是获得最大[198] [2] [34313] [4] [54] [6] [7] [888] [9] 的长度,然后使用int作为间距,但我不知道如何在X的位置使用变量。我的我想是用%-Xd替换X,即{​​{1}},但我得到的只是[%dd]。

有谁知道解决这个问题的方法?

1 个答案:

答案 0 :(得分:1)

有两个主要选项:

  1. 在运行时使用字符串中X的正确值创建格式字符串:

    char format[8];
    snprintf(format, sizeof(format), "%%%dd", width);
    printf(format, matrix[row][col]);
    
  2. 阅读printf()文档并在格式字符串中使用*以指示应从值中读取宽度:

    printf("%*d", width, matrix[row][col]);
    
  3. 这两个都以最小宽度右对齐数字。如果该值太大而不适合,则无论如何都会打印,必要时使用额外的空间。

    如果您想要零填充,可以在格式(%05d)中添加0或使用精度(%.5d)或使用%.*d。您可以使用+强制标记;您可以使用-等左对齐

    请注意,在确定最大宽度时,负数需要额外的减号空间,您需要分析最小值和最大值以确保有足够的空间。如果最大数量为9且最小值为-100,000,则使用最大数量来确定宽度将无法正常工作。显然,如果您的值都是非负值,则这不是问题。