Provided by:
manpages-es_1.55-10_all 
NOMBRE
scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf - conversion de la
entrada con formato
SINOPSIS
#include <stdio.h>
int scanf(const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
int sscanf(const char *str, const char *format, ...);
#include <stdarg.h>
int vscanf(const char *format, va_list ap);
int vsscanf(const char *str, const char *format, va_list ap);
int vfscanf(FILE *stream, const char *format, va_list ap);
DESCRIPCI'ON
La familia scanf de funciones escudrina la entrada segun un formato
como se describe mas adelante. Este formato puede contener
especificadores de conversi'on; los resultados de tales conversiones, si
las hay, se guardan donde apunten los argumentos punteros. La funcion
scanf lee la entrada del flujo de entrada estandar stdin, fscanf lee su
entrada del puntero a FILE flujo, y sscanf lee su entrada de la cadena
de caracteres a la que apunte str.
La funcion vfscanf es analoga a vfprintf(3) y lee la entrada del
puntero a FILE flujo utilizando una lista variable de argumentos de
punteros (vea stdarg(3)). La funcion vscanf rastrea una lista variable
de argumentos de la entrada estandar y la funcion vsscanf la analiza de
una cadena de caracteres; estas funciones son analogas a vprintf y
vsprintf respectivamente.
Cada argumento puntero sucesivo debe corresponder correctamente con
cada especificador de conversion sucesivo (pero vea mas adelante lo
referente a `supresion'). Todas las conversiones empiezan con el
caracter % (signo de porcentaje). La cadena de caracteres formato puede
tambien contener otros caracteres. El espacio en blanco (como espacios,
tabuladores, o saltos de linea) en la cadena de formato concuerda con
cualquier cantidad de espacio en blanco, incluyendo ninguna, en la
entrada. Cualquier otra cosa concuerda solamente consigo misma. El
analisis acaba cuando un caracter de la entrada no concuerda con un
caracter del formato. Tambien cuando una conversion no puede realizarse
(vea mas adelante).
CONVERSIONES
Despues del caracter % que marca el comienzo de una conversion puede
haber una serie de caracteres de opci'on, como sigue:
* Suprime la asignacion. La conversion que sigue ocurre como si
nada, pero no se usa ningun puntero; el resultado de la
conversion simplemente se descarta.
a (glibc) Indica que la conversion sera s, el espacio de memoria
necesario para la cadena se obtendra mediante malloc() y el
puntero a ella se asignara a la variable puntero char, que no
tiene que haber sido inicializada anteriormente. Esta opcion no
existe en C ANSI (C89) y tiene un significado diferente en C99.
a (C99) Equivalente a f.
h Indica que la conversion sera una de dioux o n y que el puntero
siguiente lo es a un short int (en vez de a un int).
l Indica bien que la conversion sera una de dioux o n y el puntero
siguiente lo es a un long int (en vez de a un int), o bien que
la conversion sera una de efg y el puntero siguiente lo es a un
double (en vez de a un float). Especificar dos opciones l
equivale a la opcion L.
L Indica que la conversion sera o bien efg y el siguiente puntero
lo es a un long double o bien que la conversion sera dioux y el
siguiente puntero lo sera a un long long. (Observe que long
long no es un tipo de C ANSI. Un programa que utilice esto no
sera transportable a todas las arquitecturas).
q equivalente a L. Esta opcion no existe en C ANSI.
Ademas de estas opciones, puede haber una anchura maxima de campo
opcional, expresado como un entero en base diez, entre el signo % y la
conversion. Si no se da la anchura, se supone `infinita' (con una
excepcion, vea mas abajo); si se da, como mucho se miran los caracteres
especificados en ella cuando haya que procesar la conversion. Antes de
que esta comience, la mayoria descartan el espacio en blanco; este
espacio no cuenta para la anchura de campo.
Estan disponibles las siguientes conversiones:
% Concuerda con un '%' literal. Esto es, `%%' en el formato
concuerda con un solo caracter '%' en la entrada. No se hace
ninguna conversion, y no hay ninguna asignacion.
d Concuerda con un entero en base diez con signo opcional; el
siguiente puntero debe serlo a int.
D Equivalente a ld; esto existe solamente por compatibilidad con
una forma antigua. (Nota: esto ocurre solo en libc4. En libc5 y
glibc %D se ignora silenciosamente, provocando el fallo
mistorioso de programas antiguos.)
i Concuerda con un entero con signo opcional; el siguiente puntero
debe serlo a int. El entero se lee en base 16 si empieza por
`0x' o `0X'; en base 8 si empieza por `0', y en base 10 si
empieza por otro digito. Solo se usan caracteres que
correspondan a la base.
o Concuerda con un entero octal sin signo; el siguiente puntero
debe serlo a unsigned int.
u Concuerda con un entero en base diez sin signo; el siguiente
puntero debe serlo a unsigned int.
x . Concuerda con un entero hexadecimal sin signo; el siguiente
puntero debe serlo a unsigned int.
X Equivalente a x
f . Concuerda con un numero en coma flotante con signo opcional; el
siguiente puntero debe serlo a float.
e Equivalente a f.
g Equivalente a f.
E Equivalente a f
s Concuerda con una secuencia de caracteres distintos de blancos;
el siguiente puntero debe serlo a char, y el vector debe ser lo
suficientemente grande como para aceptar toda la secuencia y el
caracter 0 o NUL final. El analisis de la cadena de entrada
acaba en el siguiente espacio blanco o cuando se llega a la
anchura de campo maxima, lo que ocurra antes.
c Concuerda con una secuencia de anchura caracteres (1 por
omision); el siguiente puntero debe serlo a char, y debe haber
suficiente espacio para todos los caracteres (no se anade el
caracter NUL terminador). Se suprime el descarte de los blancos
iniciales. Para saltar un espacio en blanco inicial, emplee un
espacio explicito en el formato.
[ Concuerda con una secuencia no vacia de caracteres del conjunto
especificado de caracteres aceptados; el siguiente puntero debe
serlo a char, y debe haber bastante sitio para todos los
caracteres en la cadena, mas un NUL terminal. Se suprime el
descarte usual de los espacios en blanco iniciales. La cadena se
forma con caracteres de (o no de) un conjunto particular; el
conjunto se define por los caracteres entre el corchete abierto
[ y un caracter de corchete de cierre ]. El conjunto excluye
esos caracteres si el primero despues del corchete abierto es un
acento circunflejo ^. Para incluir un corchete de cierre en el
conjunto, pongalo el primero tras el corchete abierto o el
circunflejo; en cualquiera otra posicion indicara que termina el
conjunto. El caracter guion - es tambien especial; cuando se
pone entre dos otros caracteres, anade todos los de enmedio al
conjunto. Para incluir un guion, pongalo como el ultimo caracter
antes del corchete de cierre final. Por ejemplo, `[^]0-9-]'
significa el conjunto de `todos los caracteres excepto el
corchete de cierre, los digitos del cero al nueve, y el guion'.
La cadena acaba con la aparicion de un caracter que no es (o,
con un circunflejo, que si es) del conjunto, o cuando se llega a
la anchura opcional especificada.
p Concuerda con un valor de tipo puntero (como se imprima por `%p'
en printf(3)); el siguiente puntero debe serlo a void.
n No se espera concordar con nada; en su lugar, se guarda el
numero de caracteres consumidos o leidos hasta ahora de la
entrada en donde apunte el siguiente puntero, que debe serlo a
int. Esto no es una conversion, aunque pueda suprimirse con la
opcion *. El estandar de C dice: `La ejecucion de una directriz
%n no incrementa el numero de asignaciones devuelto al final de
la ejecucion', pero el Anadido de Correcciones parece
contradecir esto. Probablemente es lo mejor no hacer ninguna
suposicion sobre el efecto de las conversiones %n en el valor de
retorno de la funcion.
VALOR DEVUELTO
Estas funciones devuelven el numero de elementos de la entrada
asignados, que pueden ser menores que los formatos suministrados para
conversion, o incluso cero, en el caso de un fallo de concordancia.
Cero indica que, mientras habia caracteres disponibles en la entrada,
no ocurrio ninguna asignacion; normalmente esto es debido a un caracter
de entrada invalido, como un caracter alfabetico para una conversion
`%d'. Se devuelve el valor EOF si ha habido un fallo de entrada antes
de ninguna conversion, como cuando se llega al final de la entrada. Si
ocurre un error de lectura o se llega al final de la entrada despues de
que se haya hecho alguna conversion al menos, se devuelve el numero de
conversiones completadas hasta ese punto con exito.
V'EASE TAMBI'EN
strtol(3), strtoul(3), strtod(3), getc(3), printf(3)
CONFORME A
Las funciones fscanf, scanf, y sscanf son conformes al estandar ANSI
X3.159-1989 (``C ANSI'').
La opcion q es la notacion de BSD 4.4 para el tipo long long, mientras
que ll o el empleo de L en conversiones de enteros, es la notacion de
GNU.
La version de Linux de estas funciones se basa en la biblioteca libio
de GNU. Eche un vistazo a la documentacion en formato info de GNU libc
(glibc-1.08) para una descripcion mas concisa.
FALLOS
Todas las funciones son conformes completamente con el estandar ANSI
X3.159-1989, pero proporcionan las opciones adicionales q y a asi como
un comportamiento adicional de las opciones L y l. Lo ultimo puede ser
considerado como un fallo, puesto que cambia el comportamiento de las
opciones definidas en el estandar ANSI X3.159-1989.
Algunas combinaciones de opciones definidas por C ANSI no tienen
sentido en C ANSI (p.ej., %Ld). Aunque pueden tener un comportamiento
bien definido en Linux, esto no tiene por que ser asi en otras
arquitecturas. Por lo tanto es normalmente mejor usar opciones que no
son definidas por C ANSI en absoluto, i.e., usar q en vez de L en
combinacion con conversiones diouxX o ll.
El empleo de q no es el mismo que en BSD 4.4, puesto que puede
utilizarse en conversiones de coma flotante de forma equivalente a L.