%* s格式说明符C.

时间:2011-11-13 12:49:42

标签: c printf scanf

printf("%d",printf("%*s%*s",6,"",6))

结果添加了2个数字(6 + 6),是否有人使用这种类型的格式说明符

3 个答案:

答案 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返回打印的字符数。其余的应该是显而易见的。