Funciones de la biblioteca C -sscanf()
Biblioteca estándar de C - <stdio.h>
Descripción
Funciones de la biblioteca Cint sscanf(const char *str, const char *format, ...)Lee una entrada formateada desde una cadena.
Declaración
A continuación se muestra la declaración de la función sscanf().
int sscanf(const char *str, const char *format, ...)
Parámetros
- str-- Esta es la cadena de C, la fuente de la cual la función recupera los datos.
- format-- Es la cadena de C, que contiene uno o más de los siguientes elementos:Caracteres de espacio, caracteres que no son de espacioyespecificadores de formato。
El especificador de formato tiene la forma[=%[*][width][modifiers]type=], como se explica a continuación:
| Parámetros | Descripción |
|---|---|
| * | Este es un asterisco opcional, que indica que los datos se leen del flujo (stream), pero pueden ignorarse, es decir, no se almacenan en el parámetro correspondiente. |
| width | Esto especifica el número máximo de caracteres que se leerán en la operación de lectura actual. |
| modifiers | Especifica para los datos a los que apunta el parámetro adicional correspondiente un tamaño distinto de entero (para d, i y n), entero sin signo (para o, u y x) o punto flotante (para e, f y g): h: entero corto (para d, i y n), o entero corto sin signo (para o, u y x) l: entero largo (para d, i y n), o entero largo sin signo (para o, u y x), o doble (para e, f y g) L: doble largo (para e, f y g) |
| type | Un carácter que especifica el tipo de datos que se va a leer y el método de lectura de datos. Consulte la siguiente tabla para más detalles. |
Especificadores de tipo de sscanf:
| Tipo | Entrada válida | Tipo de argumento |
|---|---|---|
| c | Carácter individual: lee el siguiente carácter. Si se especifica un ancho (width) distinto de 1, la función lee width caracteres y los almacena en posiciones consecutivas del arreglo, a través del parámetro. No se añade un carácter nulo al final. | char * |
| d | Entero decimal: los signos + o - delante del número son opcionales. | int * |
| e,E,f,g,G | Número de coma flotante: incluye un punto decimal, un signo inicial opcional + o -, un carácter final opcional e o E, y dígitos decimales. Dos ejemplos válidos son -732.103 y 7.12e4 | float * |
| o | Entero octal. | int * |
| s | Cadena. Lee caracteres consecutivos hasta encontrar un carácter de espacio (los caracteres de espacio pueden ser espacio en blanco, nueva línea y tabulación). | char * |
| u | Entero decimal sin signo. | unsigned int * |
| x,X | Entero hexadecimal. | int * |
Parámetros adicionales-- Esta función acepta una serie de punteros como parámetros adicionales, cada puntero apunta a un objeto, cuyo tipo se especifica mediante la etiqueta % correspondiente en la cadena format, y los parámetros están en el mismo orden que las etiquetas %.
Para cada especificador de formato en la cadena format que recupera datos, debe especificarse un parámetro adicional. Si desea almacenar el resultado de la operación sscanf en una variable normal, debe colocar el operador de referencia (&) delante del identificador, por ejemplo:
int n; sscanf (str,"%d",&n);
Valor de retorno
Si tiene éxito, la función devuelve el número de coincidencias y asignaciones exitosas. Si se llega al final del archivo o se produce un error de lectura, devuelve EOF.
Ejemplo
El siguiente ejemplo demuestra el uso de la función sscanf().
Ejemplo
#include <stdlib.h>
#include <string.h>
int main()
{
int day, year;
char weekday[20], month[20], dtm[100];
strcpy( dtm, "Saturday March 25 1989" );
sscanf( dtm, "%s %s %d %d", weekday, month, &day, &year );
printf("%s %d, %d = %s\n", month, day, year, weekday );
return(0);
}
Compilemos y ejecutemos el programa anterior, esto producirá el siguiente resultado:
March 25, 1989 = SaturdayOtras extensiones