Función de biblioteca C - fscanf ()

Descripción

La función de la biblioteca C int fscanf(FILE *stream, const char *format, ...) lee la entrada formateada de una secuencia.

Declaración

A continuación se muestra la declaración de la función fscanf ().

int fscanf(FILE *stream, const char *format, ...)

Parámetros

  • stream - Este es el puntero a un objeto FILE que identifica la secuencia.

  • format- Esta es la cadena C que contiene uno o más de los siguientes elementos: carácter de espacio en blanco, carácter que no es de espacio en blanco y especificadores de formato . Un especificador de formato será como[=%[*][width][modifiers]type=], que se explica a continuación:

No Señor. Argumento y descripción
1

*

Este es un asterisco inicial opcional que indica que los datos se leerán del flujo pero se ignorarán, es decir, no se almacenan en el argumento correspondiente.

2

width

Esto especifica el número máximo de caracteres que se leerán en la operación de lectura actual.

3

modifiers

Especifica un tamaño diferente de int (en el caso de d, iyn), unsigned int (en el caso de o, uyx) o float (en el caso de e, fyg) para los datos apuntados por argumento adicional correspondiente: h: short int (para d, iyn), o unsigned short int (para o, u y x) l: long int (para d, iyn), o unsigned long int (para o, u y x), o doble (para e, f y g) L: doble largo (para e, f y g)

4

type

Un carácter que especifica el tipo de datos que se leerán y cómo se espera que se lean. Consulte la siguiente tabla.

especificadores de tipo fscanf

tipo Entrada de calificación Tipo de argumento
C Carácter único: lee el siguiente carácter. Si se especifica un ancho diferente de 1, la función lee los caracteres de ancho y los almacena en las ubicaciones sucesivas de la matriz pasada como argumento. No se agrega ningún carácter nulo al final. char *
re Entero decimal: Número opcionalmente precedido por un signo + o - En t *
e, E, f, g, G Punto flotante: número decimal que contiene un punto decimal, opcionalmente precedido por un signo + o - y opcionalmente seguido por el carácter e o E y un número decimal. Dos ejemplos de entradas válidas son -732.103 y 7.12e4 flotar *
o Entero octal: En t *
s Cadena de caracteres. Esto leerá los caracteres posteriores hasta que se encuentre un espacio en blanco (los espacios en blanco se consideran en blanco, nueva línea y tabulación). char *
tu Entero decimal sin signo. unsigned int *
x, X Entero hexadecimal En t *
  • additional arguments- Dependiendo de la cadena de formato, la función puede esperar una secuencia de argumentos adicionales, cada uno con un valor que se insertará en lugar de cada% -tag especificado en el parámetro de formato (si corresponde). Debe haber el mismo número de estos argumentos que el número de% -tags que esperan un valor.

Valor devuelto

Esta función devuelve el número de elementos de entrada que se emparejaron y asignaron correctamente, que puede ser menos de lo previsto o incluso cero en caso de que se produzca una falla de coincidencia temprana.

Ejemplo

El siguiente ejemplo muestra el uso de la función fscanf ().

#include <stdio.h>
#include <stdlib.h>


int main () {
   char str1[10], str2[10], str3[10];
   int year;
   FILE * fp;

   fp = fopen ("file.txt", "w+");
   fputs("We are in 2012", fp);
   
   rewind(fp);
   fscanf(fp, "%s %s %s %d", str1, str2, str3, &year);
   
   printf("Read String1 |%s|\n", str1 );
   printf("Read String2 |%s|\n", str2 );
   printf("Read String3 |%s|\n", str3 );
   printf("Read Integer |%d|\n", year );

   fclose(fp);
   
   return(0);
}

Compilemos y ejecutemos el programa anterior que producirá el siguiente resultado:

Read String1 |We|
Read String2 |are|
Read String3 |in|
Read Integer |2012|