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