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;
}

输出:

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程