Sé que esto no suena productivo, pero estoy buscando una forma de recordar todos los códigos de formato de las printf
llamadas. %s
, %p
, %f
Todas son obvias, pero no puedo entender de dónde %d
viene. ¿ %i
Ya está tomado por algo más?
Sé que esto no suena productivo, pero estoy buscando una forma de recordar todos los códigos de formato de las printf
llamadas. %s
, %p
, %f
Todas son obvias, pero no puedo entender de dónde %d
viene. ¿ %i
Ya está tomado por algo más?
Respuestas:
Significa " decimal " (base 10), no "entero". Puede utilizar %x
para imprimir en hexadecimal (base 16) y %o
para imprimir en octal (base 8). Un número entero podría estar en cualquiera de estas bases.
En printf()
, puede usarlo %i
como sinónimo de %d
, si prefiere indicar "entero" en lugar de "decimal", pero %d
generalmente se prefiere porque es más específico.
En la entrada, usando scanf()
, puede usar use both %i
and %d
as well. %i
significa analizarlo como un entero en cualquier base (octal, hexadecimal o decimal, como lo indica un prefijo 0
o 0x
), mientras que %d
significa analizarlo como un entero decimal.
Aquí hay un ejemplo de todos ellos en acción:
#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;
}
Por lo tanto, solo debe usar %i
si desea que la base de entrada dependa del prefijo; si la base de entrada debe ser fijo, se debe utilizar %d
, %x
o %o
. En particular, el hecho de que un líder lo 0
ponga en modo octal puede atraparlo.
http://en.wikipedia.org/wiki/Printf_format_string parece decir que es para decimal como había adivinado
d,i
int como un número decimal con signo. '% d' y '% i' son sinónimos para la salida, pero son diferentes cuando se usan con scanf () para la entrada (usando% i interpretará un número como hexadecimal si está precedido por 0x y octal si está precedido por 0).