C编程中的printf(“%2d”)

yc0p9oo0  于 2022-12-22  发布在  其他
关注(0)|答案(2)|浏览(601)

我在stackoverflow和其他网站上看到了很多问题和答案,但我很困惑,当%2d创建了2个字符空间,我们想执行这个代码,然后会发生什么?

int a = 20011;
printf("%2d\n",a);

根据我的观点,它应该只打印2个字符宽,但当我们打印,然后它打印整个字符。为什么?
我已经编辑了这个问题。现在我想知道- sign的用法。我看过很多文章说- sign表示左对齐,但使用时请给出示例。例如:

int str[] = "skgskg";
 printf("%2s\n",str);
c0vxltue

c0vxltue1#

它指定了输出应该具有的最小宽度。如果指定的宽度大于输出本身的大小(与您的情况相反),则输出长度与指定宽度之间的差值将在输出之前打印为空格。
例如,printf("%2d\n", 12345);将只打印12345,因为12345有5位数,但指定的宽度只有2。
但是,printf("%10d\n", 12345);将打印_____1234512345之前的5个空格),因为宽度差超过输出长度5。

blpfk2vs

blpfk2vs2#

根据C标准,此数字是最小字段宽度。如果转换值的字符数少于最小字段的字符数,则用空格填充。如果转换值的字符数等于或大于最小字段的字符数,则打印整个转换值,而不是将其缩减到给定宽度。
引自C 2018 7.21.6.1 4:
可选的最小值 * 字段宽度 *。如果转换后的值的字符数少于字段宽度,则在字段宽度的左侧(或右侧,如果已指定左调整标志(稍后说明))填充空格(默认情况下)。字段宽度采用星号 *(稍后说明)或非负十进制整数的形式。
这只是第4段的一部分。它完整地给出了转换规范的完整格式,即%后跟:

  • 修改转换规范含义的零个或多个 * 标记 *(顺序不限)。
  • 可选的最小值 * 字段宽度 *。如果转换后的值的字符数少于字段宽度,则在字段宽度的左侧(或右侧,如果已指定左调整标志(稍后说明))填充空格(默认情况下)。字段宽度采用星号*(稍后说明)或非负十进制整数的形式。
  • 可选的 precision,它给出diouxX转换要显示的最小位数,aAeEf转换小数点字符后要显示的位数,和F转换的有效位数、gG转换的最大有效位数或s转换要写入的最大字节数。精度采用句点(.)后跟星号*(稍后介绍)或可选的非负十进制整数的形式;如果只指定了句点,则精度为零。如果精度与任何其他转换说明符一起出现,则行为未定义。
  • 可选的 * 长度修饰符 *,指定参数的大小。
    • 转换说明符 * 字符,指定要应用的转换类型。

相关问题