¿Cuál es la diferencia entre %d
y %i
cuando se utilizan como especificadores de formato en printf
?¿Cuál es la diferencia entre los especificadores de conversión% i y% d en las funciones formateadas de IO (* printf/* scanf)
Respuesta
Son los mismos cuando se utilizan para la salida, p. con printf
.
Sin embargo, estos son diferentes cuando se utilizan como especificador de entrada, p. con scanf
, donde %d
escanea un número entero como un número decimal con signo, pero %i
se predetermina a decimal pero también permite hexadecimal (si está precedido por 0x
) y octal si está precedido por 0
.
Así 033
sería 27 con %i
pero 33 con %d
.
No hay ninguna en esas palabras - los dos son sinónimos.
Hay una diferencia cuando se usa en la cadena de formato 'scanf()' como dice la respuesta aceptada. –
Estos son idénticos para printf
pero diferentes para scanf
. Para printf
, tanto %d
como %i
designan un entero decimal con signo. Para scanf
, %d
y %i
también significa un entero con signo, pero %i
interpreta la entrada como un número hexadecimal si va precedido de 0x
y octal si va precedido por 0
y de lo contrario interpreta la entrada como decimal.
No hay diferencia entre los especificadores de formato %i
y %d
para printf
. Podemos ver esto de ir a la sección de draft C99 standard7.19.6.1
La función fprintf que también cubre printf
con respecto a los especificadores de formato y se dice en el párrafo :
Los especificadores de conversión y sus significados son:
e incluye la siguiente bala:
d,i The int argument is converted to signed decimal in the style [−]dddd. The precision specifies the minimum number of digits to appear; if the value being converted can be represented in fewer digits, it is expanded with leading zeros. The default precision is 1. The result of converting a zero value with a precision of zero is no characters.
Por otro lado para scanf
existe una diferencia, %d
asume la base 10, mientras que %i
detecta automáticamente la base. Podemos ver esto de ir a la sección 7.19.6.2
La función fscanf que cubre scanf
con respecto al especificador de formato, en el párrafo que dice:
Los especificadores de conversión y sus significados son:
e incluye lo siguiente:
d Matches an optionally signed decimal integer, whose format is the same as expected for the subject sequence of the strtol function with the value 10 for the base argument. The corresponding argument shall be a pointer to signed integer. i Matches an optionally signed integer, whose format is the same as expected for the subject sequence of the strtol function with the value 0 for the base argument. The corresponding argument shall be a pointer to signed integer.
- 1. ¿Cuál es la diferencia entre printf ("% i") y printf ("% d")
- 2. ¿Cuál es la diferencia entre ++ $ i y $ i ++ en PHP?
- 3. ¿Cuál es la diferencia entre los especificadores de acceso y los modificadores de acceso?
- 4. ¿Cuál es la diferencia entre printf() y puts() en C?
- 5. Cuál es la diferencia entre las funciones VarIsEmpty y VarIsEmptyParam
- 6. ¿Cuál es la diferencia entre% d y% * d en el lenguaje c?
- 7. diferencia entre int * i y int * i
- 8. ¿cuál es la diferencia entre las familias de funciones printf y vprintf, y cuándo debo usar una sobre la otra?
- 9. ¿cuál es la diferencia entre la memoria asignada io y io io mapeado
- 10. ¿Qué son los identificadores de formato scanf ("% * s") y scanf ("% * d")?
- 11. ¿Cuál es la diferencia entre las dependencias de maven org.apache.commons: commons-io y commons-io: commons-io?
- 12. ¿Cuál es la diferencia entre estas funciones?
- 13. diferencia entre (++ i) y (i ++)
- 14. ¿Cuál es la diferencia entre el casting y la conversión?
- 15. diferencia entre ++ i y i ++
- 16. Diferencia entre int * i y int ** i
- 17. ¿Cuál es el tamaño de (main), sizeof (printf), sizeof (scanf)?
- 18. ¿Cuál es la diferencia entre dict() y {}?
- 19. Diferencia entre: d [count] y d [count]
- 20. ¿cuál es la diferencia entre i ++ y ++ i for for loop (Java)?
- 21. Diferencia entre las funciones read.table y read.delim
- 22. ¿Cuál es la diferencia entre los operadores de prefijo y postfijo?
- 23. diferencia entre IO-APIC-fasteoi y IO-APIC-edge
- 24. ¿Cuál es la diferencia entre las funciones RANK() y DENSE_RANK() en Oracle?
- 25. ¿Cuál es la diferencia entre% s y% d en el formato de cadenas de Python?
- 26. Diferencia entre i ++ y ++ i en un bucle for
- 27. ¿Cuál es la diferencia entre los módulos en js y las clases en php?
- 28. ¿Cuál es la diferencia entre conjuntos y listas en Python?
- 29. ¿Cuál es la diferencia entre STDIN y $ stdin en Ruby?
- 30. Diferencia entre conversión, análisis y conversión
Supongo que esperar un int con posible relleno en sscanf es el comportamiento predeterminado más razonable.Si no estás esperando Octal, eso podría causar errores sutiles. Entonces, esto sugiere que% d es un buen especificador para usar cuando tiene que elegir uno arbitrariamente, a menos que explícitamente quiera leer octal y/o hexadecimal. – Eliot