Confusión sobre la salida.

#include int main(void) { int i=1,j=-1; if((printf("%d",i))<(printf("%d",j))) printf("%d",i); else printf("%d",j); return 0; } 

Como printf() devuelve el número de caracteres impresos con éxito, la condición será if(1<1) que es falsa pero la parte if se ejecuta y la salida es 1 -1 1 . ¿Por qué sucede esto?

Creo que es bastante obvio: ‘1’ es un carácter, ‘-1’ es dos. Uno es menos de dos.

printf devuelve el número de caracteres (no solo los dígitos) escritos.

Así que printf("%d",-1) devolverá 2 no 1

De forma similar, printf("%d",1) devolverá 1

Haciendo la condición en el if verdadero.

Porque imprimir j imprime “-1”, son dos caracteres. entonces 1 <2 es verdadero.

Para -1 número de caracteres impresos es 2 por lo tanto, si se cumple la condición.