使用printf格式在C中打印等宽列

Bri*_*own 11 c printf

我想在C中使用printf打印列.我写了这段代码:

#include <stdio.h>

void printme(char *txt1, char *txt2, char *txt3)
{
    printf("TXT1: %9s TXT2 %9s TXT3 %9s\n", txt1, txt2, txt3);
}


int main()
{
    printme("a","bbbbbbbeeeeebbbbb","e");
    printme("aaaaaaaa","bbbbbbbbbbbb","abcde");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它有效,但我有这样的输出:

TXT1:         a TXT2 bbbbbbbeeeeebbbbb TXT3         e
TXT1:  aaaaaaaa TXT2 bbbbbbbbbbbb TXT3     abcde
Run Code Online (Sandbox Code Playgroud)

所以列不是等宽的.基本上,我想这样做,无论我的论证中的文本有多长,我的函数总是打印出一个很好的格式化列.问题是:我该怎么做?

saing nice我的意思是无论文本传递给我的打印功能多长时间,它都会打印出等宽列,例如:

我有这样的输出,如下所示:

a         cd`           fg           ij  
a         cd             fg           ij  
a         cd             fg           ij  
ab         cd             fg           ij  
ab         cd             fg           i j   
ab         cd             fg           ij  
ab         cd             fg           ij  
ab         cde             fgh         ij  
ab         cde             fgh         ij  
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像这样(无论我的文本参数多长时间):

a         cd`           fg           ij  
a         cd            fg           ij  
a         cd            fg           ij  
ab        cd            fg           ij  
ab        cd            fg           ij   
ab        cd            fg           ij  
ab        cd            fg           ij  
ab        cde           fgh          ij  
ab        cde           fgh          ij    
Run Code Online (Sandbox Code Playgroud)

Mic*_*urr 12

如果您希望字符串在大于列宽时被截断,那么您只需为字符串格式规范添加精度:

printf("TXT1: %9.9s TXT2 %9.9s TXT3 %9.9s\n", txt1, txt2, txt3);
Run Code Online (Sandbox Code Playgroud)

这样printf(),示例程序的输出如下所示:

TXT1:         a TXT2 bbbbbbbee TXT3         e
TXT1:  aaaaaaaa TXT2 bbbbbbbbb TXT3     abcde
Run Code Online (Sandbox Code Playgroud)


jh3*_*314 5

txt1您可以找到、txt2和的最大长度txt3,然后对其进行格式化:

// compute the max string length of txt1 inputs in advance
int s1 = strlen(firstTxt1);
if (s1 < strlen(secondTxt1)
    s1 = strlen(secondTxt1);
...

printf("%.*s %.*s %.*s\n", s1, txt1, s2, txt2, s3, txt3);
Run Code Online (Sandbox Code Playgroud)