【发布时间】:2011-12-28 00:55:11
【问题描述】:
printf("%d",printf("%*s%*s",6,"",6))
导致添加 2 个数字 (6+6),有人知道这种类型的格式说明符吗
【问题讨论】:
-
您要查找的术语是“嵌套”。如果你用谷歌搜索“nested printf”,你会发现很多信息。由于你没有提出明确的问题,所以很难回答。
printf("%d",printf("%*s%*s",6,"",6))
导致添加 2 个数字 (6+6),有人知道这种类型的格式说明符吗
【问题讨论】:
您的示例格式错误,“嵌套”printf 缺少参数。
如果你这样写:
printf("%d",printf("%*s%*s",6,"",6, ""));
如果变得有点好。 * 意味着必须从printf 的下一个参数中读取精度字段。所以在这种情况下,“嵌套”printf 打印两个长度最多为 6 的字符串。
由于printf 返回写入的字符数,内部printf 返回12,外部printf 打印。
从手册页的相关部分引用:
精度
可选精度,形式为句点 ('.'),后跟可选的十进制数字字符串。 可以用 "*" 或 "*m$" (对于一些十进制整数 m)来代替十进制数字字符串来指定 精度分别在下一个参数或第 m 个参数中给出,它必须 是 int 类型。如果精度仅以 '.' 给出,或者精度为负,则精度 被视为零。这给出了 d、i、o、u、x 和 X 出现的最小位数 转换,出现在 a、A、e、E、f 和 F 的小数字符后的位数 版本,g 和 G 转换的最大有效位数,或 最大有效位数 s 和 S 转换的字符串中要打印的字符。
我不确定它的便携性如何,但我确信有更好的方法来添加两个数字。
【讨论】:
作为宽度说明符的*表示宽度作为参数传入。
printf("%*s%*s", 6, "", 6, "");
相当于:
printf("%6s%6s", "", "");
这将打印出 12 个空格。
由于printf返回打印的字符数,所以它会返回12。
原始代码缺少最后的“”参数。如果它起作用了,那纯属偶然。
【讨论】:
printf 返回打印的字符数。其余的应该是显而易见的。
【讨论】: