带空格的左页printf


114

使用printf时,如何在字符串的左侧填充空格?

例如,我要打印“ Hello”并在其前面加上40个空格。

另外,我要打印的字符串由多行组成。我是否需要分别打印每一行?

编辑:只是要清楚,我希望每行前正好打印40个空格。

Answers:


125

如果要在宽度为40个字符的列中打印“ Hello”一词,并在左侧填充空格,请使用以下命令。

char *ptr = "Hello";
printf("%40s\n", ptr);

这将给您35个空格,然后是单词“ Hello”。当知道所需的列宽但数据会发生变化时,这就是格式化内容的方式(嗯,这是您可以做到的一种方法)。

如果您知道只需要40个空格,然后输入一些文本,只需将40个空格保存为常数并打印即可。如果需要打印多行,请使用printf上面的语句,或者使用多个语句循环执行,以更改ptr每次的值。


3
对于格式标志,dunno太多了。但我怀疑printf(“%40s%s \ n”,“”,ptr); 可以用来填充40个空格吗?
Johannes Schaub-litb

是的,这将始终为您提供指针内容之前的40个空格。这是一个不错的解决方案,但是如果您必须执行很多操作,我认为具有40个空格的常数会更快。我不知道编译器是否能够优化printf格式。
比尔蜥蜴

38
另外,如果您有一个包含要包含的空格数的int变量'n',则可以使用:printf(“%* s%s \ n”,n,“”,ptr); 获得可变数量的空格。
乔纳森·莱夫勒

并且,要解决问题的最后一部分:是的,如果您希望每行数据打印40个前导空格,那么您确实需要对数据进行分段,以便每行分别打印。
乔纳森·莱夫勒

4
@Jonathan Leffler:当然,编译器可以优化printf格式。例如,GCC优化了printf(“%s \ n”,foo)并将其替换为puts(foo)。
sam hocevar 2010年

73

我使用此函数来缩进输出(例如,打印树结构)。该indent是字符串前的空格数。

void print_with_indent(int indent, char * string)
{
    printf("%*s%s", indent, "", string);
}

7
我喜欢您使用字符串文字串联来使缩进与其余的printf格式分开。一个建议:缩进字符串使用空字符串而不是单个空格。这样缩进== 0将按预期工作。(即,printf(..., indent, "", ...)
ɲeuroburɳ

注意,Ray Hulha删除了字符串文字串联,显然是为了解决“编译器问题”。
mwfearnley '17

42
int space = 40;
printf("%*s", space, "Hello");

该语句将保留一行40个字符,并在该行的末尾打印字符串(删除多余的空格,使总行长恒定为40)。同样可以用于字符和整数,如下所示:

printf("%*d", space, 10);
printf("%*c", space, 'x');

在需要可变数量的空格的情况下,这种使用参数确定空格的方法很有用。这些语句仍然可以使用整数文字,如下所示:

printf("%*d", 10, 10);
printf("%*c", 20, 'x');
printf("%*s", 30, "Hello");

希望这对以后像我这样的人有帮助。


error: empty character constant买了''。不是' '吗?
晋权

是的,应该。
shjeff

@JinKwon任何角色,就像"Hello"可能的任何事物,他都应该使用一个示例
joe

19

如果您想在字符串前恰好需要40个空格,则应该这样做:

printf("                                        %s\n", myStr );

如果太脏了,可以这样做(但是比手动键入40个空格要慢): printf("%40s%s", "", myStr );

如果您希望字符串在第40列对齐(也就是说,最多可以有39个空格,以便最右边的字符位于第40列),请执行以下操作: printf("%40s", myStr);

您还可以通过以下操作在字符串之后最多放置40个空格: printf("%-40s", myStr);


2
像后弦空间此评论
oneat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.