Share via


Campos de especificación de formato: funciones scanf y wscanf

Esta información se aplica a la familia completa de funciones scanf, incluidas las versiones seguras. Describe los símbolos que se usan para indicar a las funciones scanf cómo analizar el flujo de entrada, como el flujo de entrada stdin, en valores que se insertan en las variables de programa.

El argumento format es una cadena que especifica la interpretación de la entrada y puede contener uno o varios de los siguientes elementos:

  • Caracteres de espacio en blanco: en blanco ( ); tabulador (\t); o nueva línea (\n). Un carácter de espacio en blanco hace que scanf lea, pero no almacene, todos los caracteres de espacio en blanco consecutivos en la entrada hasta el siguiente carácter que no sea un espacio en blanco. Un solo carácter de espacio en blanco en el formato coincide con cualquier número (incluido el 0) y combinación de caracteres de espacio en blanco de la entrada.

  • Caracteres que no sean espacios en blanco, excepto el signo de porcentaje (%). Un carácter que no sea un espacio en blanco hace que scanf lea, pero no almacene, un carácter que no sea un espacio en blanco coincidente. Si no coincide con el siguiente carácter del flujo de entrada, scanf finaliza.

  • Especificaciones de formato, introducidas mediante el signo de porcentaje (%). Una especificación de formato hace que scanf lea y convierta los caracteres de la entrada en un valor de un tipo especificado. El valor se asigna a un argumento de la lista de argumentos.

    Una especificación de formato tiene la forma siguiente:

    %[*][width][{h|l|ll|I64|L}]type

    Aquí, width, h, l, ll, I64 y L representan una scanfespecificación de ancho y type representa un scanfcarácter de campo de tipo.

La cadena de argumento format se lee de izquierda a derecha. Se espera que los caracteres fuera de las especificaciones de formato coincidan con la secuencia de caracteres en el flujo de entrada; los caracteres coincidentes en el flujo de entrada se analizan pero no se almacenan. Si un carácter en el flujo de entrada está en conflicto con la especificación de formato, scanf finaliza y el carácter se queda en el flujo de entrada como si no se hubiera leído.

Cuando se encuentra la primera especificación de formato, el valor del primer campo de entrada se convierte de acuerdo con esta especificación. Este valor se almacena en la ubicación especificada por el primer argumento que sigue al argumento format. La segunda especificación de formato hace que el segundo campo de entrada se convierta y se almacene en el siguiente argumento, y así sucesivamente hasta el final de la cadena de formato.

Un campo de entrada se define como todos los caracteres hasta el primer carácter de espacio en blanco (espacio, tabulador o nueva línea), hasta el primer carácter que no se pueda convertir según la especificación de formato o hasta que se alcance el ancho de campo (si se especifica). Si hay demasiados argumentos para las especificaciones dadas, los argumentos adicionales se evalúan pero se omiten. Los resultados son impredecibles si no hay suficientes argumentos para la especificación de formato.

Cada campo de la especificación de formato es un único carácter o un número que indica una opción de formato en concreto. El carácter type, que aparece después del último campo opcional de formato, determina si el campo de entrada se interpreta como un carácter, una cadena o un número.

La especificación de formato más simple solo contiene el signo de porcentaje y un carácter type (por ejemplo %s). Si un signo de porcentaje (%) va seguido de un carácter que no tiene ningún significado como carácter de control de formato, ese carácter y los caracteres siguientes (hasta el siguiente signo de porcentaje) se tratan como una secuencia normal de caracteres. Es decir, se tratan como una secuencia de caracteres que debe coincidir con la entrada. Por ejemplo, para especificar que se introduzca un carácter de signo de porcentaje, use %%.

Un asterisco (*) después del signo de porcentaje suprime la asignación del campo de entrada siguiente, que se interpreta como un campo del tipo especificado. El campo se analiza pero no se almacena en un argumento.

Las versiones seguras (las que tienen el sufijo _s) de la familia de funciones scanf requieren que cada parámetro de tipo c, C, s, S o [ tenga un parámetro de tamaño de búfer que se pase inmediatamente después. Para obtener más información sobre las versiones seguras de la familia de funciones scanf, vea scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l.

Consulte también

Especificación del ancho de scanf
Caracteres del campo de tipo de scanf
scanf, _scanf_l, wscanf, _wscanf_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l