почему %d означает целое число?
Я знаю, что это не звучит продуктивно, но я ищу способ запомнить все коды форматирования для printf
звонки. %s
,%p
,%f
- все очевидно, но я не могу понять, где %d
происходит от. Это %i
уже занято чем-то другим?
2 ответа:
это значит " decimal" (основание 10), а не "целое число."Вы можете использовать
%x
печать шестнадцатеричное (основание 16), и%o
для печати восьмеричной (основание 8). Целое число может быть в любом из этих оснований.In
printf()
, вы можете использовать%i
как синоним для%d
, если вы предпочитаете указывать "целое число" вместо "десятичное", но%d
обычно предпочтительнее, поскольку это более конкретно.на входе, используя
scanf()
, вы можете использовать использовать оба%i
и%d
как хорошо.%i
означает разобрать его как целое число в любой базе (восьмеричной, шестнадцатеричной или десятичной, как указано a0
или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 кажется, сказать, что это для десятичных, как я догадался
d,i
int как десятичное число. "%d " и "%i " являются синонимами для выходные данные, но отличаются при использовании с scanf() для ввода (используя %i будет интерпретировать число как шестнадцатеричное, если ему предшествует 0x, и восьмеричный, если ему предшествует 0.)