【问题标题】:printf alignment for multiple format specifiers多个格式说明符的 printf 对齐
【发布时间】:2017-06-14 09:42:00
【问题描述】:

如何使用 printf 函数对齐以下文本 假设我想要

void print() {
   printf("%s %s     %d     %c\n",firstName, lastName, age, gender); 
}

成为:

Foo Foo     15     M

Bob Bob     16     F

John John    12     M

我遇到的问题是,由于 John 的名字更长,它会将下一个说明符向下推一点。我希望它们对齐,以便每一行都按顺序排列。

【问题讨论】:

  • @xing 你能解释一下吗?你为什么选择这些数字?
  • @xing 好的,我明白了,谢谢

标签: c alignment printf


【解决方案1】:

将名字和姓氏复制到临时字符串中。然后将其传递给printf,使用%s 上的字段宽度大到足以容纳带有- 标志的全名以左对齐。

void print(char *first, char *last, int age, char gender)
{
    int len = strlen(first) + strlen(last) + 1;
    char name[len+1];
    strcpy(name, first);
    strcat(name, " ");
    strcat(name, last);
    printf("%-20s %2d    %c\n",name, age, gender);
}

使用您的示例输入,输出:

Foo Foo              15    M
Bob Bob              16    F
John John            12    M

【讨论】:

    猜你喜欢
    • 2017-11-16
    • 2012-05-17
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    相关资源
    最近更新 更多