在C中打印每个元素具有相同数量字符的矩阵

Printing a matrix with the same amount of characters per element in C

我有这个代码来打印矩阵:

void imprimir_matriz (double matriz[][3]){
    for (unsigned short int i = 0; i < 3; i++){
        for (unsigned short int j = 0; j < 3; j++){
            printf ("|%lf", matriz[i][j]);
        }
        printf("|\n");
    }
}

但是作为输出我得到了这个:

|0.8000000|-0.6000000|-2.8000000|
|-0.6000000|0.2000000|0.6000000|
|-0.2000000|0.4000000|12.2000000|

但我真正想要的是让元素像这样“对齐”,像这样:

| 0.8000000  | -0.6000000 | -2.8000000 |
| -0.6000000 | 0.2000000  | 0.6000000  |
| -0.2000000 | 0.4000000  | 12.2000000 |

这不仅仅是添加额外空格的问题,因为数字的整数部分的位数可能会有所不同。 请问,我该怎么做?

我建议一个快速但肮脏的解决方案,那就是在数字后添加 \t 个字符,并以您的最大数字为基础。

如果你真的希望它是动态的,你可以执行以下操作

您还可以计算最大数字中的位数,方法是首先遍历矩阵并找到最大数字,计算它的位数,并以此为基础计算间距。

要计算位数,您可以使用类似的东西;

while (n != 0) {
    n /= 10;
    ++count;
}

希望对您有所帮助!

您可以在格式字符串中指定宽度和精度,如下所示:“% 6.2lf”保留 space 6 个字符并将数字四舍五入到小数点后两位,space 表示“即使没有标志 space 那里 ”。 source