почему %d означает целое число?

Я знаю, что это не звучит продуктивно, но я ищу способ запомнить все коды форматирования для printf звонки. %s, %p, %f - все очевидно, но я не могу понять, где %d происходит от. Is %i уже занято чем-то другим?

2 ответов


это значит " decimal" (основание 10), а не "целое число."Вы можете использовать %x печать шестнадцатеричное (основание 16), и %o для печати восьмеричной (основание 8). Целое число может быть в любой из этих баз.

на printf(), вы можете использовать %i как синоним для %d, если вы предпочитаете указывать " целое число "вместо" десятичное", но %d обычно предпочтительнее, поскольку это более конкретно.

на входе, используя scanf(), вы можете использовать use both %i и %d как хорошо. %i означает разобрать его как целое число в любой базе (восьмеричной, шестнадцатеричной или десятичной, как указано 0 или 0x префикс), в то время как %d значит разобрать его как десятичное целое число.

вот пример всех из них в действии:

#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;
}

Итак, вы должны только использовать %i если вы хотите, чтобы база ввода зависела от префикса; если база ввода должна быть исправлена, вы должны использовать %d, %x или %o. В частности, тот факт, что ведущий 0 ставит вас в восьмеричном режиме может поймать вас.


http://en.wikipedia.org/wiki/Printf_format_string кажется, говорят, что это для decimal, как я догадался

d,i

int как десятичное число. "%d " и "%i " являются синонимами выходные данные, но отличаются при использовании scanf () для ввода (с использованием %i будет интерпретировать число как шестнадцатеричное, если ему предшествует 0x, и восьмеричный, если ему предшествует 0.)