%d
在和%i
中用作格式说明符printf
和有什么区别scanf
?
问问题
139987 次
4 回答
299
它们在用于输出时是相同的,例如使用printf
.
但是,当用作输入说明符时,这些是不同的,例如 with scanf
,其中%d
将整数扫描为带符号的十进制数,但%i
默认为十进制,但也允许十六进制(如果前面有0x
)和八进制(如果前面有0
)。
033
27 和%i
33也是如此%d
。
于 2009-12-12T13:58:07.477 回答
71
这些对于 相同printf
但对于 不同scanf
。对于printf
,两者%d
和%i
指定一个有符号十进制整数。对于scanf
,%d
和%i
也表示有符号整数,但%i
如果前面有则将输入解释为十六进制数,如果前面有0x
八进制数,则将0
输入解释为十进制。
于 2009-12-12T13:53:20.057 回答
20
%i
的和%d
格式说明符之间没有区别printf
。我们可以通过C99 标准草案7.19.6.1
的 fprintf 函数看到这一点,该函数也涵盖printf
了格式说明符,它在第8段中说:
转换说明符及其含义是:
并包括以下项目符号:
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
存在差异,%d
假设基数为 10,而%i
自动检测基数。我们可以通过转到关于格式说明符7.19.6.2
的 fscanf 函数部分来看到这一点,在第12段中它说:scanf
转换说明符及其含义是:
并包括以下内容:
d Matches an optionally signed decimal integer, whose format is the same as expected for the subject sequence of the strtol function with the value 10 for the base argument. The corresponding argument shall be a pointer to signed integer. i Matches an optionally signed integer, whose format is the same as expected for the subject sequence of the strtol function with the value 0 for the base argument. The corresponding argument shall be a pointer to signed integer.
于 2014-08-28T20:07:53.793 回答
3
没有任何内容printf
-两者是同义词。
于 2009-12-12T13:52:02.197 回答