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

前端之家收集整理的这篇文章主要介绍了使用printf格式在C中打印等宽列前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在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;
}

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

TXT1:         a TXT2 bbbbbbbeeeeebbbbb TXT3         e
TXT1:  aaaaaaaa TXT2 bbbbbbbbbbbb TXT3     abcde

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

通过saing很好我的意思是,无论文字多长时间传递给我的打印功能,它将始终打印出等宽列,例如:

我有这样的输出

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

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

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

解决方法

您可以找到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,s2,s3,txt3);

猜你在找的C&C++相关文章