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

📅  最后修改于: 2021-05-25 23:39:40             🧑  作者: 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

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

%d假定基数为10,而%i自动检测到基数。因此,两个说明符在与输入说明符一起使用时的行为会有所不同。因此,对于%i,012将为10,而对于%d,012将为12。

  • %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基础课程》。