%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具体区别示例
#includeint main() { int i = 077; printf("077转换为十进制数为:%dn",i); int i1 = 0x77; printf("0x77转换为十进制数为:%dn", i1); printf("以%%i格式说明符输入八进制077转换为十进制数n"); int i3; scanf("%i", &i3); printf("转换为十进制数为:%dn", i3); printf("以%%i格式说明符输入十六进制0x77转换为十进制数n"); int i4; scanf("%i", &i4); printf("转换为十进制数为:%dn", i4); printf("以%%d格式说明符输入八进制077转换为十进制数n"); int i5; scanf("%d", &i5); printf("转换为十进制数为:%dn", i5); printf("以%%d格式说明符输入十六进制0x77转换为十进制数n"); int i6; scanf("%d", &i6); printf("转换为十进制数为:%dn", i6); return 0; }
结果



