默认情况下,printf()似乎将字符串对齐到右侧.
printf("%10s %20s %20s\n", "col1", "col2", "col3");
/* col1 col2 col3 */
Run Code Online (Sandbox Code Playgroud)
我也可以像这样对齐左边的文字:
printf("%-10s %-20s %-20s", "col1", "col2", "col3");
Run Code Online (Sandbox Code Playgroud)
有没有快速的方法来中心文本?或者,如果该列的文本宽度为8,我是否必须编写一个将字符串test转换为的函数(space)(space)test(space)(space)?
Giu*_*ini 29
printf本身不能做到这一点,但你可以使用"间接"宽度,它通过从参数中读取宽度来指定宽度.让我们尝试一下(好吧,不完美)
void f(char *s)
{
printf("---%*s%*s---\n",10+strlen(s)/2,s,10-strlen(s)/2,"");
}
int main(int argc, char **argv)
{
f("uno");
f("quattro");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
@GiuseppeGuerrini的功能非常有用,它建议使用打印格式说明符并划分空格。不幸的是,它可以截断文本。
以下内容解决了截断问题(假设指定的字段实际上足够大以容纳文本)。
void centerText(char *text, int fieldWidth) {
int padlen = (fieldWidth - strlen(text)) / 2;
printf(%*s%s%*s\n", padLen, "", text, padlen, "");
}
Run Code Online (Sandbox Code Playgroud)