Я знаю, що це не звучить продуктивно, але я шукаю спосіб запам'ятати всі коди форматування 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).