De acuerdo con la sección 1.6 de K&R C, un char
es un tipo de entero. Entonces, ¿por qué necesitamos %c
. ¿Y por qué no podemos usar %d
para todo?
Porque %d
imprimirá el código de carácter numérico del char
:
printf("%d", 'a');
imprime 97
(en un sistema ASCII), mientras
printf("%c", 'a');
imprime a
.
Si bien es un entero, el %c
interpreta su valor numérico como un valor de carácter para mostrar. Por ejemplo, para el personaje a
:
Si usó %d
obtendría un número entero, por ejemplo, 97, la representación interna del carácter a
vs
usando %c
para mostrar el carácter ‘ a
‘ en sí (si se usa ASCII)
Es decir, es una cuestión de representación interna frente a interpretación para fines externos (como con printf
)
En términos generales, %c
imprime la representación ASCII del personaje. %d
imprime su valor decimal.
Si usa %c
, imprimirá (o escaneará) un carácter o un personaje. Si usa %d
, imprimirá (o escaneará) un número entero.
printf("%d", 0x70);
¿Cómo sabrá la máquina que desea generar un carácter, no su valor ASCII equivalente?
% d piensa que char es de 32 bits y lo imprime como un entero, pero% c convierte el valor int de char a ascii y luego lo imprime.
%d
se usa para imprimir el número decimal(integer)
, mientras que %c
se usa para imprimir el character
. Si intenta imprimir un carácter con el formato %d
, la computadora imprimirá el código ASCII
del carácter.