在C中格式化网格中的字符串和文本以使其看起来具有内聚性



我想让我的代码打印在一点更漂亮的方式,但我不知道如何解决我的问题....

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
下面是打印语句的代码:
printf("%s:tDonations:%d Requests: %dn", 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

任何想法?

诀窍是打印冒号,后面加上正确数目的空格。您可以利用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:%2dn", status[0][i], status[1][i] );

最新更新