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