%d与%i的异同
同
在printf格式串里使用时没区别
异
在scanf格式串里使用时区别
-
格式说明符%i是老式写法,可以自动将输入的八进制或十六进制转换为十进制,即
- 若输入的数字有前缀0(077),%i会将其当作八进制来处理(63),%d则把077只当作十进制,结果为77
- 若输入的数字有前缀0x(0x77),%i会将其当作十六进制来处理(119),%d输入0x77,结果出现错误,输出0
-
i - integer (指定整数)
-
d - decimal (指定十进制数)
%d与%i具体区别示例
#include <stdio.h>
int main()
{
int i = 077;
printf("077转换为十进制数为:%d\n",i);
int i1 = 0x77;
printf("0x77转换为十进制数为:%d\n", i1);
printf("以%%i格式说明符输入八进制077转换为十进制数\n");
int i3;
scanf("%i", &i3);
printf("转换为十进制数为:%d\n", i3);
printf("以%%i格式说明符输入十六进制0x77转换为十进制数\n");
int i4;
scanf("%i", &i4);
printf("转换为十进制数为:%d\n", i4);
printf("以%%d格式说明符输入八进制077转换为十进制数\n");
int i5;
scanf("%d", &i5);
printf("转换为十进制数为:%d\n", i5);
printf("以%%d格式说明符输入十六进制0x77转换为十进制数\n");
int i6;
scanf("%d", &i6);
printf("转换为十进制数为:%d\n", i6);
return 0;
}
结果