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;
}