C-不能正确对齐printf代码



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

我希望正确对齐。这就是它的外观

printf("%-20s%s %-22s%-12d"
   "%-12s%-12s%-12s%-12sn",
   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%-12sn", "RACE NAME", "FULDE NAVN", "ALDER", "HOLD", "NATION", "PLADS", "TID");
printf("-------------------------------------------------------------------------------------------------------n");

}

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

确实喜欢:

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

您将"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%-12sn",
    cyclist[i]->race_name, full_name, cyclist[i]->age, ...);

现在,标题和数据打印输出的格式相同。

第二个 %s中没有数字

printf("%-20s%s %-22s%-12d"
   "%-12s%-12s%-12s%-12sn",

应该更改为

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

当然,其余的标头需要排列。

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

相关内容

  • 没有找到相关文章

最新更新