在%d
中用作格式说明符时,%i
和printf
之间有什么区别?
答案 0 :(得分:254)
用于输出时它们是相同的,例如与printf
。
然而,当用作输入说明符时,这些是不同的,例如使用scanf
,其中%d
将整数扫描为带符号的十进制数,但%i
默认为十进制但也允许十六进制(如果前面有0x
)和八进制(如果前面有) 0
。
所以033
%i
为27,%d
为33。
答案 1 :(得分:67)
这些printf
相同但scanf
不同。对于printf
,%d
和%i
都指定带符号的十进制整数。对于scanf
,%d
和%i
也表示有符号整数,但%i
将输入解释为十六进制数(如果前面是0x
)和八进制(如果前面是{ {1}}并以其他方式将输入解释为十进制。
答案 2 :(得分:18)
%i
的{{1}}和%d
格式说明符没有区别。我们可以转到draft C99 standard部分printf
fprintf函数来查看这一点,该函数还涵盖7.19.6.1
格式说明符,并在段落中说明8 :
转换说明符及其含义为:
并包含以下项目符号:
printf
另一方面,d,i The int argument is converted to signed decimal in the style
[−]dddd. The precision specifies the minimum number of digits to
appear; if the value being converted can be represented in fewer
digits, it is expanded with leading zeros. The default precision is
1. The result of converting a zero value with a precision of zero is
no characters.
存在差异,scanf
假设基数为10而%d
自动检测到基数。我们可以通过转到%i
fscanf函数部分来看到这一点,其中包含关于格式说明符的7.19.6.2
,在段落 12 中它说:< / p>
转换说明符及其含义为:
并包含以下内容:
scanf
答案 3 :(得分:5)
这些词中没有任何一个 - 这两个是同义词。