📜  C语言中%d和%i格式说明符的区别

📅  最后修改于: 2021-09-15 01:54:39             🧑  作者: Mango

格式说明符是由初始百分比符号 (%) 组成的序列,表示格式说明符,用于指定要从流中检索并存储到附加参数指向的位置的数据的类型和格式。简而言之,它告诉我们要存储哪种类型的数据以及要打印哪种类型的数据。
例如– 如果我们想使用 scanf() 和 printf()函数读取和打印整数,则使用 %i 或 %d ,但%i%d格式说明符存在细微差别。

%d 和 %i 的行为与 printf 相似

printf 的 %i 和 %d 格式说明符之间没有区别。考虑以下示例。

C
// C program to demonstrate
// the behavior of %i and %d
// with printf statement
#include 
 
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;
}


C
// C program to demonstrate the difference
// between %i and %d specifier
#include 
 
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:
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

// C program to demonstrate the difference
// between %i and %d specifier
#include 
 
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
想要从精选的视频和练习题中学习,请查看C 基础到高级C 基础课程