【问题标题】:%*s Format specifier C [closed]%*s 格式说明符 C [关闭]
【发布时间】:2011-12-28 00:55:11
【问题描述】:

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

导致添加 2 个数字 (6+6),有人知道这种类型的格式说明符吗

【问题讨论】:

  • 您要查找的术语是“嵌套”。如果你用谷歌搜索“nested printf”,你会发现很多信息。由于你没有提出明确的问题,所以很难回答。

标签: c printf scanf


【解决方案1】:

您的示例格式错误,“嵌套”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 转换的字符串中要打印的字符。

我不确定它的便携性如何,但我确信有更好的方法来添加两个数字

【讨论】:

    【解决方案2】:

    作为宽度说明符的*表示宽度作为参数传入。

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

    相当于:

    printf("%6s%6s", "", "");
    

    这将打印出 12 个空格。

    由于printf返回打印的字符数,所以它会返回12。

    原始代码缺少最后的“”参数。如果它起作用了,那纯属偶然。

    【讨论】:

      【解决方案3】:

      printf 返回打印的字符数。其余的应该是显而易见的。

      【讨论】:

      • -1,我们知道你是绝对的天才,但你应该意识到并不是每个人都像你一样聪明。
      • 对不起,我赶时间了。我希望这将是作者了解“12”来自何处所需的全部内容。不过,我现在不会费心改进我的答案,因为其他人已经做得很好了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 2021-11-24
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      相关资源
      最近更新 更多