C语言中%d和%i格式说明符的区别
格式说明符是由初始百分比符号(%)组成的序列,表示格式说明符,该格式说明符用于指定从流中检索的数据的类型和格式,并存储到附加参数所指向的位置。简而言之,它告诉我们要存储哪种类型的数据,要打印哪种类型的数据。
例如,如果我们想使用scanf()和printf()函数读取和打印整数,可以使用%i或%d,但是%i和%d的格式说明符有细微的区别。
%d指定带符号十进制整数,%i指定整数。
%d和%i的行为与printf类似
printf的%i和%d格式说明符没有区别。考虑下面的例子。
// C program to demonstrate
// the behavior of %i and %d
// with printf statement
#include <stdio.h>
int main()
{
int num = 9;
// print value using %d
printf("Value of num using %%d is = %d\n", num);
// print value using %i
printf("Value of num using %%i is = %i\n", num);
return 0;
}
输出:
Value of num using %d is = 9
Value of num using %i is = 9
scanf中%d和%i的行为不同
%d假设基数为10,而%i auto检测基数。因此,当与输入说明符一起使用时,这两个说明符的行为是不同的。所以012是10加上%i,但12加上%d。
- %d将整型值作为有符号十进制整数i.e。它接受正数和负数,但值应该是十进制的,否则它将打印垃圾值。(注意:如果输入是像:012这样的八进制格式,那么%d将忽略0并将输入作为12)考虑下面的例子。
-
%i将整数值作为十进制、十六进制或八进制类型的整数值。
十六进制格式输入值时- value由前面的“0x”提供,- value由前面的“0”提供。
考虑下面的例子。
// C program to demonstrate the difference
// between %i and %d specifier
#include <stdio.h>
int main()
{
int a, b, c;
printf("Enter value of a in decimal format:");
scanf("%d", &a);
printf("Enter value of b in octal format: ");
scanf("%i", &b);
printf("Enter value of c in hexadecimal format: ");
scanf("%i", &c);
printf("a = %i, b = %i, c = %i", a, b, c);
return 0;
}
输出:
Enter value of a in decimal format:12
Enter value of b in octal format: 012
Enter value of c in hexadecimal format: 0x12
a = 12, b = 10, c = 18
解释:
a在12时的十进制值是12
b的十进制值12(八进制)是10
c的十进制值12(16进制)是18