当我尝试在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)