Funzione libreria C - fscanf ()

Descrizione

La funzione di libreria C. int fscanf(FILE *stream, const char *format, ...) legge l'input formattato da un flusso.

Dichiarazione

Di seguito è riportata la dichiarazione per la funzione fscanf ().

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

Parametri

  • stream - Questo è il puntatore a un oggetto FILE che identifica il flusso.

  • format- Questa è la stringa C che contiene uno o più dei seguenti elementi: carattere di spazio vuoto, carattere di spazio vuoto e specificatori di formato . Un identificatore di formato sarà as[=%[*][width][modifiers]type=], che è spiegato di seguito -

Sr.No. Argomento e descrizione
1

*

Questo è un asterisco iniziale opzionale che indica che i dati devono essere letti dal flusso ma ignorati, cioè non sono memorizzati nell'argomento corrispondente.

2

width

Specifica il numero massimo di caratteri da leggere nell'operazione di lettura corrente.

3

modifiers

Specifica una dimensione diversa da int (nel caso di d, i e n), unsigned int (nel caso di o, ue x) o float (nel caso di e, f e g) per i dati puntati dal argomento aggiuntivo corrispondente: h: short int (per d, ien), o unsigned short int (per o, ue x) l: long int (per d, i e n), o unsigned long int (per o, ue x), o doppio (per e, f e g) L: lungo doppio (per e, f e g)

4

type

Un carattere che specifica il tipo di dati da leggere e come si prevede che vengano letti. Vedere la tabella successiva.

specificatori di tipo fscanf

genere Input di qualificazione Tipo di argomento
c Carattere singolo: legge il carattere successivo. Se viene specificata una larghezza diversa da 1, la funzione legge i caratteri di larghezza e li memorizza nelle posizioni successive dell'array passato come argomento. Nessun carattere nullo viene aggiunto alla fine. char *
d Numero intero decimale: numero facoltativamente preceduto da un segno + o - int *
e, E, f, g, G Virgola mobile: numero decimale contenente un punto decimale, facoltativamente preceduto da un segno + o - e facoltativamente seguito dal carattere e o E e da un numero decimale. Due esempi di voci valide sono -732.103 e 7.12e4 galleggiante *
o Numero intero ottale: int *
S Stringa di caratteri. Questo leggerà i caratteri successivi finché non viene trovato uno spazio bianco (i caratteri di spazio vuoto sono considerati vuoti, di nuova riga e di tabulazione). char *
u Numero intero decimale senza segno. int senza segno *
x, X Intero esadecimale int *
  • additional arguments- A seconda della stringa di formato, la funzione potrebbe aspettarsi una sequenza di argomenti aggiuntivi, ciascuno contenente un valore da inserire invece di ogni tag% specificato nel parametro di formato (se presente). Dovrebbe esserci lo stesso numero di questi argomenti del numero di tag% che si aspettano un valore.

Valore di ritorno

Questa funzione restituisce il numero di elementi di input abbinati e assegnati con successo, che può essere inferiore a quello previsto o addirittura zero in caso di mancato abbinamento anticipato.

Esempio

L'esempio seguente mostra l'utilizzo della funzione 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);
}

Compiliamo ed eseguiamo il programma sopra che produrrà il seguente risultato:

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