1. 主页
  2. 文档
  3. C语言教程
  4. C语言输入输出
  5. C语言中%d和%i格式说明符的区别

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;
}
Output:
Value of num using %d is = 9
Value of num using %i is = 9

scanf 中的 %d 和 %i 行为不同

%d 假设基数为 10,而 %i 自动检测基数。因此,两个说明符在与输入说明符一起使用时表现不同。因此,012 将是 10 与 %i 但 12 与 %d。 

  • %d将整数值作为有符号十进制整数,即它采用负值和正值,但值应该是十进制的,否则它将打印垃圾值。(注意:如果输入是八进制格式,例如:012,那么 %d 将忽略 0 和将输入作为 12) 考虑以下示例。 
  • %i将整数值作为十进制、十六进制或八进制类型的整数值。 
    要以十六进制格式输入值 – 值应由前面的“0x”提供,而以八进制格式输入的值 – 值应由前面的“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;
}
Output:
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(十六进制)的十进制值为 18

这篇文章对您有用吗?