How to print an integer in C language? A user inputs an integer, and we print it. Input is done using scanf function, and the number is printed on screen using printf.
C program to print an int (integer)
#include <stdio.h>
int
main()
{
int a;
printf("Enter an integer\n");
scanf("%d", &a);
printf("The integer is: %d\n", a);
return 0;
}
Output of the program:
C program to print first hundred positive integers [1, 100] using a for loop:
#include <stdio.h>
int main()
{
int c;
for
(c = 1; c <= 100; c++)
printf("%d ", c);
return 0;
}
In C language, we have data types for different types of data, for integers, it's int, for characters it's char, for floating-point data, it's float, and so on. For large integers, you can use long or long long data type. To store integers that are greater than (2^18-1), which is the range of long long data type, you may use strings. In the below program, we store an integer in a string and display it.
C program to store an integer in a string
#include <stdio.h>
int main ()
{
char
n[1000];
printf("Input an integer\n");
scanf("%s", n);
printf("%s", n);
return
0;
}
Output of program:
Input an integer
12345678909876543210123456789
12345678909876543210123456789
An advantage of using a string is that we can store huge integers, but we can't perform arithmetic operations directly; for this, you can create functions. C programming language does not have a built-in data type for such numbers.
I am just learning C and I have a little knowledge of Objective-C due to dabbling in iOS development, however, in Objective-C I was using NSLog(@"%i", x); to print the variable x to the console however I have been reading a few C tutorials and they are saying to use %d instead of %i.
printf("%d", x); and printf("%i", x); both print x to the console correctly.
These both seem to get me to the same place so I am asking the experienced developers which is preferred? Is one more semantically correct or is right?
Acorn
24.3k5 gold badges37 silver badges67 bronze badges
asked Jun 26, 2013 at 20:16
They are completely equivalent when used with printf(). Personally, I prefer %d, it's used more often (should I say "it's the idiomatic conversion specifier for int"?).
(One difference between %i and %d is that when used with scanf(), then %d always expects a decimal integer, whereas %i recognizes the 0 and 0x prefixes as octal and hexadecimal, but no sane programmer uses scanf() anyway so this should not be a concern.)
answered Jun 26, 2013 at 20:17
5
I am just adding example here because I think examples make it easier to understand.
In printf() they behave identically so you can use any either %d or %i. But they behave differently in scanf().
For example:
int main() { int num,num2; scanf("%d%i",&num,&num2);// reading num using %d and num2 using %i printf("%d\t%d",num,num2); return 0; }Output:
You can see the different results for identical inputs.
num:
We are reading num using %d so when we enter 010 it ignores the first 0 and treats it as decimal 10.
num2:
We are reading num2 using %i.
That means it will treat decimals, octals, and hexadecimals differently.
When it give num2 010 it sees the leading 0 and parses it as octal.
When we print it using %d it prints the decimal equivalent of octal 010 which is 8.
jwpfox
5,05411 gold badges45 silver badges42 bronze badges
answered Jul 4, 2014 at 13:05
A.s. BhullarA.s. Bhullar
2,6202 gold badges25 silver badges32 bronze badges
1
d and i conversion specifiers behave the same with fprintf but behave differently for fscanf.
As some other wrote in their answer, the idiomatic way to print an int is using d conversion specifier.
Regarding i specifier and fprintf, C99 Rationale says that:
The %i conversion specifier was added in C89 for programmer convenience to provide symmetry with fscanf’s %i conversion specifier, even though it has exactly the same meaning as the %d conversion specifier when used with fprintf.
answered Jun 26, 2013 at 20:27
ouahouah
141k15 gold badges267 silver badges327 bronze badges
both %d and %i can be used to print an integer
%d stands for "decimal", and %i for "integer." You can use %x to print in hexadecimal, and %o to print in octal.
You can use %i as a synonym for %d, if you prefer to indicate "integer" instead of "decimal."
On input, using scanf(), you can use use both %i and %d as well. %i means parse it as an integer in any base (octal, hexadecimal, or decimal, as indicated by a 0 or 0x prefix), while %d means parse it as a decimal integer.
check here for more explanation
why does %d stand for Integer?
answered Jun 26, 2013 at 20:24
Priyatham51Priyatham51
1,8541 gold badge16 silver badges24 bronze badges
%d seems to be the norm for printing integers, I never figured out why, they behave identically.
answered Jun 26, 2013 at 20:17
StephanStephan
15.3k7 gold badges34 silver badges61 bronze badges
As others said, they produce identical output on printf, but behave differently on scanf. I would prefer %d over %i for this reason. A number that is printed with %d can be read in with %d and you will get the same number. That is not always true with %i, if you ever choose to use zero padding. Because it is common to copy printf format strings into scanf format strings, I would avoid %i, since it could give you a surprising bug introduction:
I write fprintf("%i ...", ...);
You copy and write fscanf(%i ...", ...);
I decide I want to align columns more nicely and make alphabetization behave the same as sorting: fprintf("%03i ...", ...); (or %04d)
Now when you read my numbers, anything between 10 and 99 is interpreted in octal. Oops.
If you want decimal formatting, just say so.
answered May 9, 2015 at 12:55
David RoundyDavid Roundy
1,6462 gold badges13 silver badges20 bronze badges