格式化网格中的字符串和文本,使其在C中具有凝聚力

时间:2016-10-22 01:55:20

标签: c string formatting

我试图以更漂亮的方式打印我的代码,但我不确定如何解决我的问题......

Protein:        Donations:0 Requests: 0
Dairy:  Donations:0 Requests: 0
Grains: Donations:0 Requests: 0
Vegetables:     Donations:0 Requests: 0
Fruits: Donations:0 Requests: 0

这是我对print语句的代码:

printf("%s:\tDonations:%d Requests: %d\n", TYPES[i], status[0][i], status[1][i]);

我希望它看起来像这样:

Protein:        Donations:0 Requests: 0
Dairy:          Donations:0 Requests: 0
Grains:         Donations:0 Requests: 0
Vegetables:     Donations:0 Requests: 0
Fruits:         Donations:0 Requests: 0

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

诀窍是打印冒号后面有正确数量的空格。您可以通过利用printf提供的多项功能来实现此目的:

  • printf返回打印的字符数
  • printf可以在最小字段宽度中保留对齐文本,例如在格式字符串"%-10s"中,减号导致文本左对齐,数字10指定最小字段宽度为10.
  • 字段宽度可以作为变量传递,例如printf( "%-*s", 10, "hello" )将打印"hello"后跟5个空格

总而言之,代码看起来像这样:

int count = printf( "%s", TYPES[i] );
printf( "%-*s", 16-count, ":" );
printf( "Donations:%2d Requests:%2d\n", status[0][i], status[1][i] );