Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
363 views
in Technique[技术] by (71.8m points)

c - why does %d stand for Integer?

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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
", 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
", 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
", 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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...