Home »
C programming language
Difference between %d and %i format specifier in C programming language.
In c programming language, there are some set of characters preceded by % character, which define the type of input and output values, know as format specifiers/ conversion characters.
For example - if you want to read and print single character using scanf and printf function, %c is used.
Consider the following statements
char gender;
scanf("%c",&gender);
printf("Gender is: %c\n",gender);
Here %c is using in both statements scanf and printf, while reading values from the user, %c in scanf define that single character is going to be read, similarly %c in printf defines that only single character will be printed.
Difference between %d and %i format specifier?
%d and %i both are used to read and print integer values, still they have differences.
%d - Specifies signed decimal integer
%i - Specifies integer
%d and %i as output specifiers
Both specifiers are same if they are using as output specifiers, printf function will print the same value either %d or %i is used.
Consider the following example
#include <stdio.h>
int main()
{
int a=6734;
printf("value of \"a\" using %%d is= %d\n",a);
printf("value of \"a\" using %%i is= %i\n",a);
return 0;
}
value of "a" using %d is= 6734
value of "a" using %i is= 6734
%d and %i as Input specifiers
Both specifiers are different if they are using as input specifiers, scanf function will act differently based on %d and %i.
%d as input specifier
%d takes integer value as signed decimal integer i.e. it takes negative values along with positive values but values should be decimal.
%i as input specifier
%i takes integer value as integer value with decimal, hexadecimal or octal type.
To give value in hexadecimal format - value should be provided by preceding "0x" and value in octal format - value should be provided by preceding "0".
Consider the following example
#include <stdio.h>
int main()
{
int a=0;
int b=0;
printf("Enter value of a: ");
scanf("%d",&a);
printf("Enter value of b: ");
scanf("%i",&b);
printf("a=%d, b=%d\n",a,b);
return 0;
}
Enter value of a: 2550
Enter value of b: 0x2550
a=2550, b=9552
In this example the entered value of a is 2550 (through %d format specifier) and the entered value of b is 0x2550 (through %i format specifier). Since 0x2550 is given to b which is scanning value through %i so it would be 9552 (which is the decimal value of 0x2550).