小智 52
与它们一起使用时它们完全等效printf().就个人而言,我更喜欢%d,它更经常使用(我应该说"它是"惯用转换说明符int"?).
(之间的一个区别%i,并%d是与使用时scanf(),则%d总是需要一个十进制整数,而%i识别0和0x前缀为八进制和十六进制,但没有健全的程序员使用scanf()反正所以这不应该是一个问题.)
A.s*_*lar 20
我只是在这里添加示例,因为我认为示例使其更容易理解.
在printf()中,它们的行为相同,因此您可以使用任何%d或%i.但它们在scanf()中表现不同.
例如:
int main()
{
int num,num2;
scanf("%d%i",&num,&num2);// reading num using %d and num2 using %i
printf("%d\t%d",num,num2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:

您可以看到相同输入的不同结果.
num:
我们正在阅读num使用,%d所以当我们输入010它时忽略第一个0并将其视为十进制10.
num2:
我们正在阅读num2使用%i.
这意味着它将以不同方式处理小数,八进制和十六进制.
当它给num2 010它看到领先0并将其解析为八进制.
当我们用它打印%d它打印八进制的十进制值010是8.