Why does %d stand for integer?
c, formatting, printf
Solution
It stands for "decimal" (base 10), not "integer." You can use `%x` to print in hexadecimal (base 16), and `%o` to print in octal (base 8). An integer could be in any of these bases.
In `printf()`, you can use `%i` as a synonym for `%d`, if you prefer to indicate "integer" instead of "decimal," but `%d` is generally preferred as it's more specific.
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.
Here's an example of all of them in action:
#include <stdio.h>
int main() {
int out = 10;
int in[4];
printf("%d %i %x %o\n", out, out, out, out);
sscanf("010 010 010 010", "%d %i %x %o", &in[0], &in[1], &in[2], &in[3]);
printf("%d %d %d %d\n", in[0], in[1], in[2], in[3]);
sscanf("0x10 10 010", "%i %i %i", &in[0], &in[1], &in[2]);
printf("%d %d %d\n", in[0], in[1], in[2]);
return 0;
}
So, you should only use `%i` if you want the input base to depend on the prefix; if the input base should be fixed, you should use `%d`, `%x`, or `%o`. In particular, the fact that a leading `0` puts you in octal mode can catch you up.
Problem
I know this doesn't sound productive, but I'm looking for a way to remember all of the formatting codes for `printf` calls. `%s`, `%p`, `%f` are all obvious, but I can't understand where `%d` comes from. Is `%i` already taken by something else?