¿Cuál es la diferencia entre %d
y %i
cuando se usan como especificadores de formato printf
?
202
Ellos son los mismos cuando se utiliza para la salida, por ejemplo con printf
.
Sin embargo, estos son diferentes cuando se usan como especificador de entrada, por ejemplo scanf
, con , donde %d
escanea un número entero como un número decimal con signo, pero por %i
defecto es decimal pero también permite hexadecimal (si está precedido por 0x
) y octal (si está precedido por 0
).
Entonces 033
sería 27 con %i
pero 33 con %d
.
printf
yscanf
.Estos son idénticos para
printf
pero diferentes parascanf
. Paraprintf
, ambos%d
y%i
designan un entero decimal con signo. Forscanf
,%d
y%i
también significa un entero con signo, pero%i
interpreta la entrada como un número hexadecimal si está precedido por0x
y octal si está precedido por0
y de lo contrario interpreta la entrada como decimal.fuente
No hay diferencia entre los especificadores de formato
%i
y . Podemos ver esto yendo al borrador de la sección estándar C99 La función fprintf que también cubre con respecto a los especificadores de formato y dice en el párrafo 8 :%d
printf
7.19.6.1
printf
e incluye la siguiente viñeta:
Por otro lado, porque
scanf
hay una diferencia,%d
asuma la base 10 mientras%i
auto detecta la base. Podemos ver esto yendo a la sección7.19.6.2
La función fscanf que cubrescanf
con respecto al especificador de formato, en el párrafo 12 dice:e incluye lo siguiente:
fuente
No hay ninguno en
printf
- los dos son sinónimos.fuente
scanf()
formato de cadena como dice la respuesta aceptada.