¿Por qué se usa% c en C?

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.