Las funciones que veremos en esta sección permiten la entrada/salida de cualquier tipo de variable. El tipo es especificado como argumento de la función. Ambas están definidas en el fichero de cabecera stdio.h, por lo que este fichero deberá ser incluido en el programa.
%[flags][width][.prec][F|N|h|l]type
Donde type es un carácter de conversión. El campo flag afecta al tipo de justificación; width es la anchura utilizada para imprimir, .prec es la precisión (número de decimales) si el dato a imprimir es un número en coma flotante. El último campo opcional afecta a la interpretación del argumento (se deja al estudiante buscar el significado de este campo). Los tipos de datos a imprimir (campo type) son los siguientes:
%c Caracter
%d Entero decimal
%ld Entero largo (long int)
%Ld Entero largo largo (long long)
%e Flotante se representa con exponente
%f Flotante se representa sin exponente
%lf double
%Lf long double
%g Expresión más compacta entre %e y %f
%o Entero octal, sin el cero inicial
%u Entero decimal sin signo
%x Entero representado en hexadecimal sin 0x
%s Strings (cadenas de caracteres).
Ejemplo_E_S_3. El siguiente programa muestra un ejemplo de uso de scanf y printf:
#include <stdio.h>
int main( void )
{
int i;
double f;
scanf ("%d %lf", &i, &f);
printf ("i=%d f=%lf\n",i, f);
return 0;
}
Explicación de la sintaxis de scanf.- Los argumentos a esta función se pueden dividir en dos partes. A la izquierda de la coma y entre comillas la cadena de caracteres donde se indica el tipo de datos a leer de teclado, especificados de la misma manera que la usada en printf. El número y tipos a especificar puede ser cualquiera. A la derecha de la coma van las variables donde guardar los valores leídos, más concretamente, hay que especificar la dirección de memoria central donde se almacenan estas variables. Esta es una consideración muy importante a tener en cuenta a la hora de usar scanf. Para obtener la dirección de memoria donde se almacena una variable se usa el operador unario &, operador que se estudiara en profundidad más adelante cuando se hable de punteros. Este operador devuelve la dirección de memoria donde se almacena la variable especificada a su derecha. En el caso del ejemplo, &i devuelve la dirección de memoria donde se almacena la variable i. Igual para &f.