使用printf的可变长度空间

bva*_*ugt 9 c printf

我正在尝试格式化一些printf语句以允许任意级别的缩进.理想情况下,我想要以下输出,其中"One","Two"等是可变长度日志消息的占位符.

One
 Two
  Three
 Two
One
Run Code Online (Sandbox Code Playgroud)

我正在研究缩进所需的可变长度间距,我知道我可以执行以下操作:

printf( "%*s", indent_level, "" );
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有办法在没有第二个空字符串arg的情况下完成它.

ada*_*amk 16

您可以将要打印输出的参数作为参数传递:

printf( "%*s", indent_level + strlen(mystr), mystr );
Run Code Online (Sandbox Code Playgroud)


und*_*ica 5

由于某种原因无法发表评论,因此作为单独的死灵答案发布。

>>“当然,如果第一个参数也是可变长度,那么这对你不起作用”

> 是的,就是这样;它需要能够处理数字值作为第一个参数。

你可以使用无用的字符串

printf ("%*s%d", indent_level, "", decimal);
Run Code Online (Sandbox Code Playgroud)

为了缩进可变长度的小数。有点笨重,但有效。