%i o %d para imprimir enteros en C usando printf()?

%i o %d para imprimir enteros en C usando printf()?

Son completamente equivalentes cuando se usan con printf() . Personalmente, prefiero %d , se usa con más frecuencia (debería decir "es el especificador de conversión idiomática para int "?).

(Una diferencia entre %i y %d es que cuando se usa con scanf() , luego %d siempre espera un entero decimal, mientras que %i reconoce el 0 y 0x prefijos como octal y hexadecimal, pero ningún programador cuerdo usa scanf() de todos modos, esto no debería ser una preocupación).


Solo agrego un ejemplo aquí porque creo que los ejemplos hacen que sea más fácil de entender.

En printf() se comportan de manera idéntica, por lo que puede usar cualquier %d o %i. Pero se comportan de manera diferente en scanf().

Por ejemplo:

int main()
{
    int num,num2;
    scanf("%d%i",&num,&num2);// reading num using %d and num2 using %i

    printf("%d\t%d",num,num2);
    return 0;
}

Salida:

Puede ver los diferentes resultados para entradas idénticas.

num :

Estamos leyendo num usando %d entonces cuando ingresamos 010 ignora el primer 0 y lo trata como decimal 10 .

num2 :

Estamos leyendo num2 usando %i .

Eso significa que tratará los decimales, octales y hexadecimales de manera diferente.

Cuando da num2 010 ve el 0 inicial y lo analiza como octal.

Cuando lo imprimimos usando %d imprime el equivalente decimal de octal 010 que es 8 .


d y i los especificadores de conversión se comportan igual con fprintf pero se comportan de manera diferente para fscanf .

Como otros escribieron en su respuesta, la forma idiomática de imprimir un int está usando d especificador de conversión.

Con respecto a i especificador y fprintf , C99 Justificación dice que: