Home » C programming language

Difference between %d and %i format specifier in C programming language.

Format specifier/ conversion characters

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;
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: ");

	printf("Enter value of 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).



Comments and Discussions



Languages: » C » C++ » C++ STL » Java » Data Structure » C#.Net » Android » Kotlin » SQL
Web Technologies: » PHP » Python » JavaScript » CSS » Ajax » Node.js » Web programming/HTML
Solved programs: » C » C++ » DS » Java » C#
Aptitude que. & ans.: » C » C++ » Java » DBMS
Interview que. & ans.: » C » Embedded C » Java » SEO » HR
CS Subjects: » CS Basics » O.S. » Networks » DBMS » Embedded Systems » Cloud Computing
» Machine learning » CS Organizations » Linux » DOS
More: » Articles » Puzzles » News/Updates

© some rights reserved.