【问题标题】:how to printf a dynamic amount of placeholders in c?如何在c中打印动态数量的占位符?
【发布时间】:2019-09-18 10:20:58
【问题描述】:

通常,您的 printf() 中有一定数量的占位符,这意味着我必须提前确定一定数量的数字和字符串占位符。

是否可以使您的 printf() 中的占位符数量动态或专门使 %d 占位符打印一个“空”字符

【问题讨论】:

  • 如果我有多个彼此相邻怎么办? “宽度”变量的命名有什么关系?还是编译器只是假设“value”前面的变量是“width”变量?
  • @Pingu run-time(不是编译器)只是在找到%* 时从参数列表中获取“下一件事”并将其用作宽度。所以printf( "%d %d", a, b )会使用默认宽度打印两个数字,printf( "%d %*d", a, widthB, b )会正常打印a,然后使用widthB(下一个参数)作为打印b的宽度。 printf( "%*d %*d", widthA, a, widthB, b ) 将为 ab 使用(单独的)宽度。

标签: c printf d placeholder digits


【解决方案1】:
printf("%*.*d", width, precision, value);

使用这种格式,您可以保持宽度和精度灵活,并将它们提供给printf

考虑以下示例:

printf("<%*.*d>\n", 4, 1, 12);
printf("<%-*.*d>\n", 4, 3, 12);
printf("<%*.*d>\n", 0, 0, 0);
printf("<%*.*d>\n", 2, 0, 0);

输出:

<  12>                                                                                                                                                                   
<012 >                                                                                                                                                                   
<>
<  >

【讨论】:

  • 我正在寻找的是某种宽度值,它只会使值“不可见”,我希望 width = 0 会打印“无”
  • @Pingu 所以你想有条件地打印值,而不是专门控制宽度(这就是“数字数量”听起来像你在问)?在我的脑海中,我不记得有一个“条件打印”选项(至少在printf 的标准版本中......它可能有人可能写了一个非标准扩展)。
  • 是的,特别是如果值 = 0,我想避免打印占位符,但我仍然需要 printf() 中的占位符,以防值!= 0
  • @Pingu,如果是这种情况,则需要输入precision = 0,请查看更新后的答案
猜你喜欢
  • 1970-01-01
  • 2022-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
  • 2020-06-05
相关资源
最近更新 更多