Provided by: manpages-es_1.55-3_all bug

NOMBRE

       scanf,  fscanf,  sscanf,  vscanf,  vsscanf,  vfscanf - conversión 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ÓN

       La familia scanf de funciones escudriña la  entrada  según  un  formato
       como   se   describe   más   adelante.   Este  formato  puede  contener
       especificadores de conversin; los resultados de tales conversiones, si
       las  hay, se guardan donde apunten los argumentos punteros.  La función
       scanf lee la entrada del flujo de entrada estándar 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 función vfscanf es análoga  a  vfprintf(3)  y  lee  la  entrada  del
       puntero  a  FILE  flujo  utilizando una lista variable de argumentos de
       punteros (vea stdarg(3)).  La función vscanf rastrea una lista variable
       de argumentos de la entrada estándar y la función vsscanf la analiza de
       una cadena de caracteres; estas funciones  son  análogas  a  vprintf  y
       vsprintf respectivamente.

       Cada  argumento  puntero  sucesivo  debe corresponder correctamente con
       cada especificador de conversión sucesivo (pero  vea  más  adelante  lo
       referente  a  ‘supresión’).  Todas  las  conversiones  empiezan  con el
       carácter % (signo de porcentaje). La cadena de caracteres formato puede
       también contener otros caracteres. El espacio en blanco (como espacios,
       tabuladores, o saltos de línea) 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
       análisis  acaba  cuando  un  carácter de la entrada no concuerda con un
       carácter del formato. También cuando una conversión no puede realizarse
       (vea más adelante).

CONVERSIONES

       Después  del  carácter  % que marca el comienzo de una conversión puede
       haber una serie de caracteres de opcin, como sigue:

       *      Suprime la asignación. La conversión que sigue  ocurre  como  si
              nada,  pero  no  se  usa  ningún  puntero;  el  resultado  de la
              conversión simplemente se descarta.

       a      (glibc) Indica que la conversión será s, el espacio  de  memoria
              necesario  para  la  cadena  se  obtendrá mediante malloc() y el
              puntero a ella se asignará a la variable puntero  char,  que  no
              tiene  que haber sido inicializada anteriormente. Esta opción no
              existe en C ANSI (C89) y tiene un significado diferente en  C99.

       a      (C99) Equivalente a f.

       h      Indica  que la conversión será 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 conversión será 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 conversión será 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 opción L.

       L      Indica que la conversión será o bien efg y el siguiente  puntero
              lo  es a un long double o bien que la conversión será dioux y el
              siguiente puntero lo será a un long  long.   (Observe  que  long
              long  no  es un tipo de C ANSI.  Un programa que utilice esto no
              será transportable a todas las arquitecturas).

       q      equivalente a L.  Esta opción no existe en C ANSI.

       Además de estas opciones, puede  haber  una  anchura  máxima  de  campo
       opcional,  expresado como un entero en base diez, entre el signo % y la
       conversión. Si no se da la  anchura,  se  supone  ‘infinita’  (con  una
       excepción, vea más abajo); si se da, como mucho se miran los caracteres
       especificados en ella cuando haya que procesar la conversión. Antes  de
       que  ésta  comience,  la  mayoría  descartan el espacio en blanco; este
       espacio no cuenta para la anchura de campo.

       Están disponibles las siguientes conversiones:

       %      Concuerda con un ’%’  literal.  Esto  es,  ‘%%’  en  el  formato
              concuerda  con  un  solo  carácter ’%’ en la entrada. No se hace
              ninguna conversión, y no hay ninguna asignación.

       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 sólo 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’ ó ‘0X’; en base 8 si empieza por  ‘0’,  y  en  base  10  si
              empieza   por   otro   dígito.   Sólo  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 número 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
              carácter  0  ó  NUL  final.  El análisis de la cadena de entrada
              acaba en el siguiente espacio blanco o  cuando  se  llega  a  la
              anchura de campo máxima, lo que ocurra antes.

       c      Concuerda  con  una  secuencia  de  anchura  caracteres  (1  por
              omisión); el siguiente puntero debe serlo a char, y  debe  haber
              suficiente  espacio  para  todos  los caracteres (no se añade el
              carácter NUL terminador).  Se suprime el descarte de los blancos
              iniciales.  Para  saltar un espacio en blanco inicial, emplee un
              espacio explícito en el formato.

       [      Concuerda con una secuencia no vacía 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,  más 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  carácter de corchete de cierre ].  El conjunto excluye
              esos caracteres si el primero después del corchete abierto es un
              acento  circunflejo ^.  Para incluir un corchete de cierre en el
              conjunto, póngalo el primero  tras  el  corchete  abierto  o  el
              circunflejo; en cualquiera otra posición indicará que termina el
              conjunto.  El carácter guión - es también  especial;  cuando  se
              pone  entre  dos otros caracteres, añade todos los de enmedio al
              conjunto. Para incluir un guión, póngalo como el último carácter
              antes  del  corchete  de  cierre  final. Por ejemplo, ‘[^]0-9-]’
              significa el  conjunto  de  ‘todos  los  caracteres  excepto  el
              corchete  de cierre, los dígitos del cero al nueve, y el guión’.
              La cadena acaba con la aparición de un carácter que  no  es  (o,
              con un circunflejo, que sí 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
              número de caracteres consumidos  o  leídos  hasta  ahora  de  la
              entrada  en  donde apunte el siguiente puntero, que debe serlo a
              int.  Esto no es una conversión, aunque pueda suprimirse con  la
              opción *.  El estándar de C dice: ‘La ejecución de una directriz
              %n no incrementa el número de asignaciones devuelto al final  de
              la   ejecución’,   pero   el   Añadido  de  Correcciones  parece
              contradecir esto. Probablemente es lo  mejor  no  hacer  ninguna
              suposición sobre el efecto de las conversiones %n en el valor de
              retorno de la función.

VALOR DEVUELTO

       Estas  funciones  devuelven  el  número  de  elementos  de  la  entrada
       asignados,  que  pueden ser menores que los formatos suministrados para
       conversión, o incluso cero, en el caso de  un  fallo  de  concordancia.
       Cero  indica  que, mientras había caracteres disponibles en la entrada,
       no ocurrió ninguna asignación; normalmente esto es debido a un carácter
       de  entrada  inválido,  como un carácter alfabético para una conversión
       ‘%d’. Se devuelve el valor EOF si ha habido un fallo de  entrada  antes
       de  ninguna conversión, como cuando se llega al final de la entrada. Si
       ocurre un error de lectura o se llega al final de la entrada después de
       que  se haya hecho alguna conversión al menos, se devuelve el número de
       conversiones completadas hasta ese punto con éxito.

VÉASE TAMBIÉN

       strtol(3), strtoul(3), strtod(3), getc(3), printf(3)

CONFORME A

       Las funciones fscanf, scanf, y sscanf son conformes  al  estándar  ANSI
       X3.159-1989 (‘‘C ANSI’’).

       La  opción q es la notación de BSD 4.4 para el tipo long long, mientras
       que ll o el empleo de L en conversiones de enteros, es la  notación  de
       GNU.

       La  versión  de Linux de estas funciones se basa en la biblioteca libio
       de GNU.  Eche un vistazo a la documentación en formato info de GNU libc
       (glibc-1.08) para una descripción más concisa.

FALLOS

       Todas  las  funciones  son conformes completamente con el estándar ANSI
       X3.159-1989, pero proporcionan las opciones adicionales q y a así  como
       un comportamiento adicional de las opciones L y l.  Lo último puede ser
       considerado como un fallo, puesto que cambia el comportamiento  de  las
       opciones definidas en el estándar 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  qué  ser así 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
       combinación 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.