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

在网格中格式化字符串和文本,使其在C中看起来具有内聚性,c,string,formatting,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 以下是打印语句的代码: printf("%s:\tDonations:%d Requ

我正试图使我的代码打印更漂亮一点,但我不知道如何解决我的问题

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: %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

有什么想法吗?

诀窍是在冒号后面打印正确数量的空格。您可以利用
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] );