stdio.h
    
Especificadores de Conversión para fscanf ANSI C
Enteros
| d | 
Lee un entero decimal opcionalmente con signo. El argumento correspondiente
es un puntero a un entero | 
| i | 
Lee un entero decimal, octal, o hexadecimal opcionalmente con signo.
El argumento correspondiente es un puntero a un entero | 
| o | 
Lee un entero octal sin signo. El argumento correspondiente es un puntero
a un entero sin signo | 
| u | 
Lee un entero decimal sin signo. El argumento correspondiente es un
puntero a un entero sin signo | 
| x ó X | 
Lee un entero hexadecimal. El argumento correspondiente es un puntero
a un entero sin signo. | 
| h ó l | 
[Prefijo] Coloca antes de cualquier especificador de conversión
de enteros para indicar que la entrada de datos es un entero de tipo short
o long | 
 
Ejemplo:
#include <stdio.h>
int main()
{
   int ddec, idec, ioct, ihex;
   unsigned int ooct, udec, xhex;
   short int hddec;
   long int lddec;
   printf( "Introduce un número decimal: " );
   scanf( "%d", &ddec );
   printf( "Introduce un número decimal, octal (precédelo con un cero, 0), y\n  hexadecimal (precédelo con un cero y una '\x\', 0x): " );
   scanf( "%i %i %i", &idec, &ioct, &ihex );
   printf( "Introduce un número octal: " );
   scanf( "%o", &ooct );
   printf( "Introduce un número decimal (no negativo): " );
   scanf( "%u", &udec );
   printf( "Introduce un número hexadecimal: " );
   scanf( "%x", &xhex );
   printf( "Introduce un número decimal "pequeño" y uno "grande": " );
   scanf( "%hd %ld", &hddec, &lddec );
   printf( "\nHas introducido: " );
   printf( "%d %d %d %d %d %d %d %d %d\n", ddec, idec, ioct, ihex, ooct, udec, xhex, hddec, lddec );
   return 0;
}
Números de Coma Flotante
| e, E, f, g, ó G | 
Lee un valor de coma flotante. El argumento correspondiente es un puntero
a una variable de coma flotante | 
| l ó L | 
[Prefijo] Coloca antes de cualquier especificador de conversión
de coma flotante para indicar que la entrada de datos es un valor de tipo
double
o long double | 
 
Ejemplo:
#include <stdio.h>
int main()
{
   float ereal, freal, greal;
   double lfreal;
   long double Lfreal;
   printf( "Introduce un número real: " );
   scanf( "%f", &freal );
   printf( "Introduce un número real, con exponente: " );
   scanf( "%e", &ereal );
   printf( "Introduce otro número real, con exponente: " );
   scanf( "%g", &greal );
   printf( "Introduce un número real con doble precisión y otro con mayor aún: " );
   scanf( "%lf %Lf", &lfreal, &Lfreal );
   printf( "\nHas introducido: " );
   printf( "%5.10f %5.12e %5.12g %10.20lf %10.20Lf\n", freal, ereal, greal, lfreal, Lfreal );
   return 0;
}
Caracteres y Cadenas
| c | 
Lee un carácter. El argumento correspondiente es un puntero
a char, ningún nulo ('\0') es añadido | 
| s | 
Lee una cadena de caracteres. El argumento correspondiente es un puntero
a una array de tipo char que es suficientemente grande para guardar
la cadena y un carácter nulo ('\0') final | 
 
Ejemplo:
#include <stdio.h>
#include <string.h>
int main()
{
   char c, cadena[80];
   printf( "Introduce un carácter: " );
   scanf( "%c", &c );
   printf( "Introduce una cadena de caracteres (sin espacios): " );
   scanf( "%s", cadena );
   printf( "\nHas introducido: " );
   printf( "\'%c\' \"%s\" (%d caracteres)\n", c, cadena, strlen(cadena) );
   return 0;
}
Conjunto de Búsqueda
| [caracteres a buscar] | 
Busca en una cadena de caracteres un conjunto de caracteres que están
guardados en un array | 
 
Ejemplo:
#include <stdio.h>
#include <string.h>
int main()
{
   char cadena[80], temp[80];
   printf( "Escribe una palabra, que empiece por una vocal: " );
   scanf( "%[aeiou]", cadena );
   scanf( "%s", temp );    /* Recoger los caracteres restantes */
   printf( "\nSólo se ha recogido las primeras letras que sean vocales: \"%s\"\n", cadena );
   printf( "Escribe otra palabra, que empiece por una consonante (no son vocales): " );
   scanf( "%[^aeiou]", cadena );
   printf( "\nSólo se ha recogido las primeras letras que no sean vocales: \"%s\"\n", cadena );
   return 0;
}
Misceláneo
| números enteros | 
[Prefijo] Coloca antes de un especificador para indicar la "anchura
de campo" de caracteres, a la hora de asignar el valor introducido. Sólo
se asignarán los primeros x caracteres especificados por
el número prefijo. | 
| p | 
    Lee un puntero de memoria de la misma forma producida cuando una dirección 
      de memoria es convertida con %p en una sentencia de fprintf, 
      fprintf, sprintf, vfprintf, vprintf, o vsprintf | 
| n | 
    Guarda el número de caracteres entradas hasta ahora en este fscanf, 
      scanf, o sscanf. El argumento correspondiente es un puntero a un entero. | 
| % | 
Salta un signo de porcentaje (%) en los datos de entrada | 
| * | 
[Prefijo] Símbolo de supresión de asignación.
Actúa como un comodín para el dato introducido. | 
 
Ejemplo:
#include <stdio.h>
int main()
{
   int num1, num2, tam, porc;
   unsigned char cadena[10];
   unsigned int dia, mes, anyo;
   void *memPtr;
   printf( "Introduce un número de 6 dígitos: " );
   scanf( "%3d%3d", &num1, &num2 );
   printf( "El número introducido ha sido separado en 2 números de 3 dígitos cada uno: %d y %d\n\n", num1, num2 );
   printf( "Introduce una palabra (hasta 10 letras): " );
   scanf( "%s%n", cadena, &tam );
   printf( "La palabra escrita: \"%s\", %d caracteres escritos. Comienza en la dirección: %p\n\n", cadena, tam, cadena );
   printf( "Introduce una dirección de memoria, en hexadecimal: " );
   scanf( "%p", &memPtr );
   printf( "La memoria es: %p, y como datos tiene: %s\n\n", memPtr, memPtr );
   printf( "Introduce un porcentaje (usa el símbolo %%): " );
   scanf( "%d%%", &porc );
   printf( "Introdujiste: %d%%\n\n", porc );
   printf( "Introduce la fecha de hoy: " );
   scanf( "%d%*c%d%*c%d", &dia, &mes, &anyo );
   printf( "Día: %d, Mes: %d, Año: %d\n\n", dia, mes, anyo );
   return 0;
}