En el lenguaje C tenemos muchas instrucciones correspondientes al escribir del pseudocódigo. Nos centraremos, por el momento, en una única instrucción: la función printf. La función printf() es una función del lenguaje incluida en la librería stdio.h. Es necesario por tanto para utilizarla incluir este archivo utilizando la directiva #include <stdio.h>.
Que hace la función printf()
La función printf() se utiliza para escribir información para la salida estándar (normalmente la pantalla del ordenador). La estructura de esta función es:
printf ("<especificador de formato>"[, <expresión>, <expresión>, ...]
Los caracteres son delimitados por comillas simples y las cadenas de caracteres son delimitadas por comillas dobles. Un especificador de formato le indica a la función sobre la forma de convertir, dar forma e imprimir sus argumentos. Un especificador de formato comienza con el carácter %. Por ejemplo:
printf ("Hola");
Cuando se ejecuta produce:
Hola
Con un especificador de formato y un argumento:
printf ("El número 66 en decimal es %d" , 66);
Cuando se ejecuta produce:
El número 66 en decimal es 66
La siguiente tabla muestra los diferentes tipos de campos utilizados por la función printf() en los especificadores de formato.
Carácter | Argumento | Salida resultante |
D | enter | Enter con signo en base decimal |
I | enter | Enter con signo en base decimal |
O | enter | Enter sin signo con base octal |
U | enter | Enter sin signo con base decimal |
X | enter | Enter sin signo con base hexadecimal usando minúscula |
X | enter | Enter sin signo con base hexadecimal usando mayúsculas |
F | real | Número real con signo |
E | real | Número real con signo usando notación e |
E | real | Número real con signo usando notación E |
G | real | Número real con signo con formato e ó f, por de tamaño corto |
G | real | Número real con signo en formato E ó f, por de tamaño corto |
C | carácter | Un carácter |
S | cadena de caracteres | Una cadena de caracteres |
Puede utilizar más de un especificador de formato en la función printf(). Para ello deben haber tantos argumentos como especificadores de formato. Por ejemplo:
printf ("Un carácter es %c y un número es %d", 'a', 33);
Fíjese que los argumentos van separados por comas.
La sintaxis completa de una especificación de formato es la siguiente:
%[<flags>][<ancho>][.<precisión>][{h|l|L}] <tipo>
Una especificación de formato siempre comienza con %. El resto de los elementos se explican en la tabla siguiente.
Elemento | Posibilidades | Explicación |
flags | - | Justifica el resultado a la izquierda en el <ancho> especificado. Por defecto, la justificación se hace por la derecha. |
+ | Inicia siempre la salida con el signo + o − para los valores numéricos. Por defecto sólo aparece el signo − para los valores negativos. | |
0 | Llena la salida con ceros no significativos en el <ancho> especificado. | |
Espacio | Inicia siempre la salida con un espacio en blanco para los valores numéricos positivos. Se ignora si se utiliza junto con +. Función dependiente del <tipo> indicado: | |
flags | # |
Tipo c, d, y, u Se ignora. |
Tipo o, x, X Inicia la salida con 0, 0x, 0X respect. | ||
Tipo de, E, f, g, G Obliga que la salida contenga un punto decimal. | ||
ancho | Número mínimo de posiciones (caracteres) por la totalidad de la salida. Si el valor de la expresión ocupa más caracteres de los especificados, la anchura es incrementada tanto como sea necesario. Este apartado admite la posibilidad de un * (asterisco), el cual indica que el valor que debe considerarse como <ancho> es el resultado de la siguiente expresión en la lista de las expresiones, antes de la expresión que estamos formatando. | |
precisión | 0 | Función dependiente del <tipo> indicado: |
Tipo d, y, o, u, x, X, c Se ignora. | ||
Tipo f, e, E, g, G Sin punto decimal. | ||
<n> | Como mucho, <n> posiciones. | |
* | El valor que debe considerarse como <precisión> es el resultado de la siguiente expresión en la lista de las expresiones, antes de la expresión que estamos formatando. | |
h | Se utiliza como prefijo con los tipos d, y, o, x y X para especificar que el valor es short int, o con uno para especificar que es un short unsigned int. Se utiliza como prefijo con los tipos d, y, o, x y X para especificar que el valor es long int, o con uno para especificar que es un long unsigned int. También se utilizacon los tipos e, E, f, gi G para especificar que el valor es double. Se utiliza como prefijo con los tipos de, E, f, gi G para especificar que el valor es long double. El tipo determina cómo debe ser interpretado el dato de salida: como un char, como un int, como un float, etc. Este apartado también es obligatorio. | |
l (ela) | ||
L | ||
tipos |
Secuencias de escape
El símbolo de barra invertida (\) se llama habitualmente carácter de escape. Se puede pensar en una secuencia de escape utilizada en la función printf ( ) como un escape de la interpretación normal de una cadena de caracteres. Esto significa que el siguiente carácter después del \ tiene un significado especial, como se ve en la siguiente tabla.
Símbolo | Efecto |
\n | Salta a la siguiente línea (line feed). |
\r | Regreso de carro (carriage return). Provoca ir al inicio de línea. |
\t | Tabula la salida horizontalmente. |
\v | Tabula la salida verticalmente. |
\b | Retroceso (espacio a la izquierda). |
\f | Provoca salto de página (form feed). |
\0 | Provoca la aparición del carácter nulo, es decir, el carácter que ocupa el puesto cero en la mesa ASCII. |
\a | Provoca que suene el altavoz |
\\ | Provoca la salida de la barra invertida (\). |
\' | Provoca la salida del cometa simple. |
\" | Provoca la salida de las dobles comillas (“). |
%% | Provoca la salida del símbolo tanto por ciento (%). |
Ejemplos
Suponiendo que tenemos la siguiente declaración:
int ptas=-25; unsigned int edad=20; float euros=50.5; char sexo='?';
Instrucción | Salida efectuada |
printf("%o",edat) | 24, que es el valor octal de 20 decimal. |
printf("%c",sexo) | ? |
printf("%f",euros) | 50.500000 |
printf("%.4f",euros) | 50.5000 |
printf("%E",euros) | 5.05000E+01 |
printf("%.4e",euros) | 5.050e+01 |
printf("%g",euros) | 50.5 |
printf("%.*E",3,euros) | 5.05E+01 |