无法正确对齐printf代码

时间:2017-11-25 18:24:42

标签: c styles alignment printf

当我尝试在C中打印漂亮时,我似乎无法正确对齐。我已经尝试了很长时间,并且无法在网上找到任何帮助。 有人可以解释一下为什么这不起作用而我应该做些什么呢?

我希望正确对齐它们.. This is how it looks

printf("%-20s%s %-22s%-12d"
   "%-12s%-12s%-12s%-12s\n",
   cyclist[i]->race_name, cyclist[i]->first_name, cyclist[i]->last_name, cyclist[i]->age,
   cyclist[i]->team, cyclist[i]->nation, cyclist[i]->placement, cyclist[i]->race_time);

标题打印

void print_header(){
printf("-------------------------------------------------------------------------------------------------------\n");
printf("%-20s%-27s%-12s%-12s%-12s%-12s%-12s\n", "RACE NAME", "FULDE NAVN", "ALDER", "HOLD", "NATION", "PLADS", "TID");
printf("-------------------------------------------------------------------------------------------------------\n");

}

3 个答案:

答案 0 :(得分:0)

您为标题"FULDE NAVN"打印"%-27s"。但是将名字和姓氏打印为"%s %-22s"。这些格式不一样,如果名字长度超过4个字符,则会出现问题。

我建议您为全名列创建名称的临时字符串,并将其打印为单个字符串。

也许像

char full_name[28];
snprintf(full_name, sizeof(full_name), "%s %s",
    cyclist[i]->first_name, cyclist[i]->last_name);

printf("%-20s%-27s%-12d%-12s%-12s%-12s%-12s\n",
    cyclist[i]->race_name, full_name, cyclist[i]->age, ...);

现在标题和数据打印输出的格式都是一样的。

答案 1 :(得分:0)

第二个%s里面没有数字

printf("%-20s%s %-22s%-12d"
   "%-12s%-12s%-12s%-12s\n",

应改为

printf("%-20s%10s %-22s%-12d"
   "%-12s%-12s%-12s%-12s\n",

然后当然,标题的其余部分需要排成一行。

我的建议是a)将formatStr保存到一个变量中,同一个变量用于标题作为行,b)将名称格式化为自己的字符串sprintf(full_name, "%s %s", first_name, last_name)

答案 2 :(得分:0)

使用姓氏和名字制作一个字符串。

这样做:

printf("%-20s%-27s%-12d"
   "%-12s%-12s%-12s%-12s\n",
   "race_name", "first_name last_name", 25,
   "team", "nation", "placement", "race_time");