why does %d stand for Integer?

前端 未结 2 856
失恋的感觉
失恋的感觉 2020-12-12 20:22

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,

相关标签:
2条回答
  • 2020-12-12 20:49

    http://en.wikipedia.org/wiki/Printf_format_string seems to say that it's for decimal as I had guessed

    d,i

    int as a signed decimal number. '%d' and '%i' are synonymous for output, but are different when used with scanf() for input (using %i will interpret a number as hexadecimal if it's preceded by 0x, and octal if it's preceded by 0.)

    0 讨论(0)
  • 2020-12-12 20:57

    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.

    0 讨论(0)
提交回复
热议问题