printf("%d",printf("%*s%*s",6,"",6))
结果添加了2个数字(6 + 6),是否有人使用这种类型的格式说明符
答案 0 :(得分:9)
您的示例格式错误,“嵌套”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,e,E,f和F con的基数字符后出现的位数 版本,g和G转换的最大有效位数,或最大数量 要从s和S转换的字符串打印的字符。
我不确定这是多么便携,但我确信有更好的方法来添加两个数字。
答案 1 :(得分:1)
作为宽度说明符的A *表示宽度作为参数传入。
printf("%*s%*s", 6, "", 6, "");
相当于:
printf("%6s%6s", "", "");
这会打印12个空格。
由于printf
返回打印的字符数,因此将返回12。
原始代码缺少最后的“”参数。如果它有效,那纯粹是偶然的。
答案 2 :(得分:-1)
printf
返回打印的字符数。其余的应该是显而易见的。