Me pregunto cuál es la diferencia entre% D,% d y% i en la función printf, porque todos muestran números enteros, entonces, ¿por qué hay 3 formatos para mostrar números enteros? ¿Debe haber una diferencia entre estos tres formatos?

Editar: también estaba pidiendo% D, no solo% iy% d.

1
Flaz 6 jul. 2017 a las 17:52

2 respuestas

La mejor respuesta

Primero, %D no es un estándar.

Cuando se trata de %d y %i, no hay diferencia para la salida (por ejemplo: printf), como señalan algunos usuarios en los comentarios y Oliver Charlesworth en su respuesta.

Sin embargo, para los datos de entrada (p. Ej .: scanf), puede usar %i para escanear valores hexadecimales (si están precedidos por 0x) u octal (si están precedidos por 0). Su comportamiento predeterminado escaneará valores decimales.

Por ejemplo: si ingresa algunos datos usando %i como 0x28, será lo mismo que 40 en dec.

EDITAR: Algún código como ejemplo:

#include <stdio.h>
int main(){
    int dec, hex;
    scanf("%i",&hex); //For example, hex = 0x28
    scanf("%d",&dec); //For example, dec = 28
    printf("Hex: %d\nDec: %d\n",hex,dec); // outputs: Hex = 40, Dec = 28
}
7
Jonathan Leffler 6 jul. 2017 a las 15:51

No hay diferencia entre %d y %i, y hasta donde puedo decir, %D no es una cosa (o al menos, tal vez sea una extensión específica del compilador).

Consulte http://en.cppreference.com/w/c/io/fprintf, o la sección 7.19.6.1 del, por ejemplo, el estándar C99.

4
Oliver Charlesworth 6 jul. 2017 a las 15:01