前言
在搜集资料的时候,意外发现了与%d功能十分相同的格式输出字符%i。关于%d是我们日常编程中经常使用的用于输出有符号十整数的格式输出符,那至于%i,我相信有很多初学者是第一次见。
相同点
先说一下百分号地和百分号的相同点吧在printf()函数中,这两个的功能是完全相同的,都是输出有符号十进制整数
printf()普通使用
#include<stdio.h>
int main()
{
int a = 1145145, b = 1145145;
printf("%d\n", a);
printf("%i\n", b);
return 0;
}
输入1145145,结果一致
printf()溢值情况
#include<stdio.h>
int main()
{
int a = 2147483648, b = 2147483648;
printf("%d\n", a);
printf("%i\n", b);
return 0;
}
输入2147483648,结果溢出为-2147483648
异同点
它们的区别主要在是scanf()函数上
当你使用%d时候,如果你实际输入的是8进制16进制的数,%d会忽略前面的八进制或者十六进制符号直接输入后面的数字
但是如果你使用%i,%i会读取前面的8进制和16进制符号,如果它读取到这些符号之后的实际输入也会转换成8进制和16进制,然后再转换为十进制
例子
scanf()正常使用
#include<stdio.h>
int main()
{
int a = 0, b = 0;i
scanf(" %d,%i", &a,&b);
printf("%d\n", a);
printf("%i\n", b);
return 0;
}
输入和输出都是1145145
scanf()八进制或十六进制
#include<stdio.h>
int main()
{
int a = 0, b = 0;
scanf(" %d,%i", &a,&b);
printf("a:%d\n", a);
printf("b:%i\n", b);
return 0;
}
输入012,%d输出12,%i输出10
可以看到a的结果为12,%d忽略了前面的八进制符号,b的结果为10,八进制12的十进制值就为10
后言
如果你简单有帮助,请点个赞,有什么想法请评论一下,必定回复