Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 226 Vote(s) - 3.48 Average
  • 1
  • 2
  • 3
  • 4
  • 5
%i or %d to print integer in C using printf()?

#1
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_?
Reply

#2
%d seems to be the norm for printing integers, I never figured out why, they behave identically.
Reply

#3
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.)
Reply

#4
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

**https://stackoverflow.com/questions/13409014/why-does-d-stand-for-integer**
Reply

#5
`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.
Reply

#6
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.
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through