我在stackoverflow和其他网站上看到了很多问题和答案,但我很困惑,当%2d创建了2个字符空间,我们想执行这个代码,然后会发生什么?
int a = 20011;
printf("%2d\n",a);
根据我的观点,它应该只打印2个字符宽,但当我们打印,然后它打印整个字符。为什么?
我已经编辑了这个问题。现在我想知道- sign的用法。我看过很多文章说- sign表示左对齐,但使用时请给出示例。例如:
int str[] = "skgskg";
printf("%2s\n",str);
2条答案
按热度按时间c0vxltue1#
它指定了输出应该具有的最小宽度。如果指定的宽度大于输出本身的大小(与您的情况相反),则输出长度与指定宽度之间的差值将在输出之前打印为空格。
例如,
printf("%2d\n", 12345);
将只打印12345
,因为12345
有5位数,但指定的宽度只有2。但是,
printf("%10d\n", 12345);
将打印_____12345
(12345
之前的5个空格),因为宽度差超过输出长度5。blpfk2vs2#
根据C标准,此数字是最小字段宽度。如果转换值的字符数少于最小字段的字符数,则用空格填充。如果转换值的字符数等于或大于最小字段的字符数,则打印整个转换值,而不是将其缩减到给定宽度。
引自C 2018 7.21.6.1 4:
可选的最小值 * 字段宽度 *。如果转换后的值的字符数少于字段宽度,则在字段宽度的左侧(或右侧,如果已指定左调整标志(稍后说明))填充空格(默认情况下)。字段宽度采用星号 *(稍后说明)或非负十进制整数的形式。
这只是第4段的一部分。它完整地给出了转换规范的完整格式,即
%
后跟:*
(稍后说明)或非负十进制整数的形式。d
、i
、o
、u
、x
和X
转换要显示的最小位数,a
、A
、e
、E
、f
转换小数点字符后要显示的位数,和F
转换的有效位数、g
和G
转换的最大有效位数或s
转换要写入的最大字节数。精度采用句点(.
)后跟星号*
(稍后介绍)或可选的非负十进制整数的形式;如果只指定了句点,则精度为零。如果精度与任何其他转换说明符一起出现,则行为未定义。