c/c++语言开发共享使用printf格式在C中打印等宽列

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

#include  void printme(char *txt1, char *txt2, char *txt3) { printf("TXT1: %9s TXT2 %9s TXT3 %9sn", 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 nice我的意思是无论文本传递给我的打印function多长时间,它总是打印出等宽列,例如:

我的输出看起来像这样:

 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 

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

 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 

    您可以找到txt1txt2txt3的最大长度,然后对其进行格式化:

     // compute the max string length of txt1 inputs in advance int s1 = strlen(firstTxt1); if (s1 < strlen(secondTxt1) s1 = strlen(secondTxt1); ... printf("%.*s %.*s %.*sn", s1, txt1, s2, txt2, s3, txt3); 

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

     printf("TXT1: %9.9s TXT2 %9.9s TXT3 %9.9sn", txt1, txt2, txt3); 

    使用printf() ,示例程序的输出如下所示:

     TXT1: a TXT2 bbbbbbbee TXT3 e TXT1: aaaaaaaa TXT2 bbbbbbbbb TXT3 abcde 

    不幸的是,没有TRIVIAL方法可以做到这一点。

    您可以在main()中执行两遍方法:

     char **data[] = { { "a","bbbbbbbeeeeebbbbb","e" }, {"aaaaaaaa","bbbbbbbbbbbb","abcde" } }; get_columwidths(data[0][0], data[0][1], data[0][2]); get_columwidths(data[1][0], data[1][1], data[1][2]); printme(data[0][0], data[0][1], data[0][2]); printme(data[1][0], data[1][1], data[1][2]); 

    然后这个:

     int columnwidths[3]; void get_columwidths(const char *s1, const char *s2, const char *s3) { int len1 = strlen(s1); int len2 = strlen(s2); int len3 = strlen(s3); if (columnwidths[0] < len1) columnwidths[0] = len1; if (columnwidths[1] < len2) columnwidths[1] = len2; if (columnwidths[2] < len3) columnwidths[2] = len3; } void printme(char *txt1, char *txt2, char *txt3) { printf("TXT1: %*s TXT2 %*s TXT3 %*sn", columnwidths[0], txt1, columnwidths[1], txt2, columnwidths[2], txt3); } 

    看看我的简单库libtprint : https : //github.com/wizzard/libtprint代码很简单,你应该能够理解它是如何工作的。

    基本上你需要的是使用每列的字段宽度并计算对齐偏移。

    希望能帮助到你 !

      以上就是c/c++开发分享使用printf格式在C中打印等宽列相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560629.html

      (0)
      上一篇 2021年1月28日
      下一篇 2021年1月28日

      精彩推荐