Я знаю, что это не кажется продуктивным, но я ищу способ запомнить все коды форматирования для вызовов printf. %s, %p, %f все очевидны, но я не могу понять, откуда приходит %d. Является ли %i уже чем-то другим?
Почему% d означает Integer?
Ответ 1
Это означает "decimal" (база 10), а не "целое число". Вы можете использовать %x для печати в hexadecimal (база 16) и %o для печати в octal (база 8). Целое число может быть в любой из этих баз.
В printf() вы можете использовать %i как синоним для %d, если вы предпочитаете указывать "integer" вместо "decimal", но %d обычно предпочтительнее, чем более конкретный.
На входе, используя scanf(), вы можете использовать как %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 помещает вас в восьмеричный режим, может вас поднять.
Ответ 2
http://en.wikipedia.org/wiki/Printf_format_string, кажется, говорит, что он для десятичного, как я догадался
d,i
int как знаковое десятичное число. '% d' и '% i' являются синонимами для вывода, но при использовании с scanf() для ввода (при использовании% я будет интерпретировать число как шестнадцатеричное, если ему предшествует 0x, и восьмеричный, если ему предшествует 0.)