格式化IO函数中的转换说明符%i和%d之间有什么区别(* printf / * scanf)

时间:2009-12-12 13:49:34

标签: c++ c printf scanf format-specifiers

%d中用作格式说明符时,%iprintf之间有什么区别?

4 个答案:

答案 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)

这些词中没有任何一个 - 这两个是同义词。