Un mejor uso de printf
El infame printf (y las funciones de su familia) ha sido siempre una de las primeras funciones que todo aprendiz de programación en C ha tenido que utilizar. Sin embargo, su uso casi siempre está infravalorado limitándose a escribir por pantalla algún texto con algún parámetro.
Vamos a ver un ejemplo de como aprovechar mejor la familia de funciones printf. Imaginemos que queremos formatear una cadena para mostrar un número en decimal y su equivalente en hexadecimal:
printf("%d en decimal es 0x%X en hexadecimal\n", 12, 12);
El anterior trozo de código produciría esta salida:
12 en decimal es 0xC
Lo podemos poner más bonito. Podemos hacer que el número hexadecimal aparezca con ceros a la izquierda.
printf("%d en decimal es 0x%08X en hexadecimal\n", 12, 12);
Ahora al número hexadecimal se le añadirán tantos 0s como sea necesario hasta tener un número de 8 cifras:
12 en decimal es 0x0000000C en hexadecimal
Aún podemos mejorarlo más. Como se puede ver el parámetro 12 está repetido. Lo suyo sería incluirlo una única vez y que los modificadores de la cadena (%d, %x) hicieran referencia a él. Esto es una extensión de POSIX.
printf("%1$d en decimal es 0x%1$08X en hexadecimal\n", 12);
La salida será la misma con la diferencia de que hemos evitado repetir un parámetro.
12 en decimal es 0x0000000C en hexadecimal
Más info: Wikipedia
