Funzione libreria C - sscanf ()

Descrizione

La funzione di libreria C. int sscanf(const char *str, const char *format, ...) legge l'input formattato da una stringa.

Dichiarazione

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

int sscanf(const char *str, const char *format, ...)

Parametri

  • str - Questa è la stringa C che la funzione elabora come origine per recuperare i dati.

  • format- Questa è la stringa C che contiene uno o più dei seguenti elementi: carattere spazio vuoto, carattere non spazio bianco e specificatori di formato

    Un identificatore di formato segue questo prototipo: [=% [*] [larghezza] [modificatori] tipo =]

Sr.No. Argomento e descrizione
1

*

Si tratta di un asterisco iniziale opzionale, che indica che i dati devono essere letti dal flusso ma ignorati, ovvero non vengono 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 *
  • other arguments - Questa funzione prevede una sequenza di puntatori come argomenti aggiuntivi, ciascuno che punta a un oggetto del tipo specificato dal tag% corrispondente all'interno della stringa di formato, nello stesso ordine.

    Per ogni identificatore di formato nella stringa di formato che recupera i dati, è necessario specificare un argomento aggiuntivo. Se si desidera memorizzare il risultato di un'operazione sscanf su una variabile regolare, è necessario anteporre al suo identificatore l'operatore di riferimento, ovvero un segno e commerciale (&), come: int n; sscanf (str, "% d", & n);

Valore di ritorno

In caso di successo, la funzione restituisce il numero di variabili riempite. In caso di errore di input prima che i dati possano essere letti correttamente, viene restituito EOF.

Esempio

L'esempio seguente mostra l'utilizzo della funzione sscanf ().

#include <stdio.h>
#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);
}

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

March 25, 1989 = Saturday