首页 > 解决方案 > 字符串之间的间距

问题描述

puts("***************** CURRENT TRANSACTIONS *****************");
puts("DATE\t\tDESCRIPTION\t\tAMOUNT");
for (int i = 0; i < blocks; i++)
{
    if (strcmp("DEPOSIT", description[i]) == 0 || strcmp("deposit", description[i]) == 0)
        printf("%s\t%s\t\t\t+%s\n", date[i], description[i], amount[i]);
    else
        printf("%s\t%s\t-%s\n", date[i], description[i], amount[i]);
}

}

我已经制作了一个类似上面的程序。它应该根据数组打印字符串。一切正常,只是输出不均匀。数据应该采用类似图表的格式,其中每个字符串的开头与标题的开头在同一位置,但由于某些字符串的长度,\t 甚至没有。我想知道除了创建一堆检查字符串长度的 if 语句之外,是否有其他方法可以解决这个问题?

例子:

DATE            DESCRIPTION            AMOUNT
BLAH BLAH       BLAH                   BLAH BLAH BLAH
BLAH            BLAH BLAH BLAH BLAH    BLAH
BLAH BLAH BLAH  BLAH BLAH              BLAH BLAH

标签: cprintf

解决方案


您仍然可以使用printf它。
代码:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    printf("%-20s%-50s%-30s\n", "DATE", "DESCRIPTION", "AMOUNT");
    printf("%-20s%-50s%-30s\n", "BLAH BLAH", "BLAH", "BLAH BLAH BLAH");
    printf("%-20s%-50s%-30s\n", "BLAH", "BLAH BLAH BLAH BLAH", "BLAH BLAH");
    printf("%-20s%-50s%-30s\n", "BLAH BLAH BLAH", "BLAH BLAH", "BLAH");
    return 0;
}

这是示例输出。

DATE                DESCRIPTION                                       AMOUNT                        
BLAH BLAH           BLAH                                              BLAH BLAH BLAH                
BLAH                BLAH BLAH BLAH BLAH                               BLAH BLAH                     
BLAH BLAH BLAH      BLAH BLAH                                         BLAH     

推荐阅读