Caratteri di campo di tipo per scanf
Le informazioni seguenti si applicano a qualsiasi famiglia di funzioni scanf, incluse le versioni sicure, come scanf_s.
Il carattere type è l'unico campo di specifica di formato obbligatorio; viene visualizzato dopo tutti i campi di formato. Il carattere type determina se l'argomento associato verrà interpretato come un carattere, una stringa o un numero.
Tipi di Carattere per le funzioni scanf
Carattere |
Tipo di input previsto |
Tipo di argomento |
Dimensioni dell'argomento nella versione sicura? |
---|---|---|---|
c |
Character Una volta utilizzato con scanf, specifica un carattere a byte singolo; quando utilizzato con wscanf, specifica un carattere "wide". Gli spazi vuoti che normalmente vengono ignorati vengono letti quando c è specificato. Per leggere il successivo carattere non vuoto a byte singolo, utilizzare %1s; per leggere il successivo carattere non vuoto "wide", utilizzare %1ws. |
Puntatore a char una volta utilizzato con la funzione scanf, puntatore a wchar_t una volta utilizzato con la funzione wscanf. |
Obbligatorio. La dimensione non include lo spazio per un carattere di terminazione null. |
C |
Dimensione del carattere opposto. Una volta utilizzato con scanf, specifica un carattere "wide"; quando utilizzato con wscanf, specifica un carattere a byte singolo. Gli spazi vuoti che normalmente vengono ignorati vengono letti quando C è specificato. Per leggere il successivo carattere non vuoto a byte singolo, utilizzare %1s; per leggere il successivo carattere non vuoto "wide", utilizzare %1ws. |
Puntatore a wchar_t una volta utilizzato con la funzione scanf, puntatore a char una volta utilizzato con la funzione wscanf. |
Obbligatorio. La dimensione dell'argomento non include lo spazio per un carattere di terminazione null. |
d |
Integer decimale. |
Puntatore a int. |
No. |
i |
Intero. Esadecimale se la stringa di input inizia con "0x" o "0X", ottale se la stringa inizia con "0 ", decimale in caso contrario. |
Puntatore a int. |
No. |
o |
Intero ottale. |
Puntatore a int. |
No. |
u |
Unsigned Integer decimale. |
Puntatore a unsignedint. |
No. |
x |
Integer esadecimale. |
Puntatore a int. |
No. |
e, E, f, g, G |
Il valore a virgola mobile composto dal segno facoltativo (+ o -), serie di uno o più cifre decimali che contengono il separatore decimale e l'esponente facoltativo ("e" o "E") seguito facoltativamente da un valore intero con segno. |
Puntatore a float. |
No. |
n |
Nessun input letto dal flusso o dal buffer. |
Puntatore a int, in cui è archiviato il numero di caratteri letti correttamente dal flusso o dal buffer fino a quel punto della chiamata corrente alle funzioni scanf o wscanf. |
No. |
s |
Stringa, fino al primo spazio vuoto (spazio, tab o nuova riga). Per leggere le stringhe non delimitate da spazi, utilizzare il set di parentesi quadre ([ ]), come illustrato in Specifica della larghezza per scanf. |
Quando utilizzato con le funzioni scanf, indica una matrice di caratteri a byte singolo; una volta utilizzato con le funzioni wscanf, indica una matrice a caratteri estesi. In entrambi i casi, la matrice di caratteri deve essere sufficientemente grande per il campo di input più il carattere di terminazione null, che viene automaticamente aggiunto. |
Obbligatorio. La dimensione include lo spazio per un carattere di terminazione null. |
S |
Stringa di caratteri di dimensione opposta, fino al primo spazio vuoto (spazio, tab o nuova riga). Per leggere le stringhe non delimitate da spazi, utilizzare il set di parentesi quadre ([ ]), come illustrato in Specifica della larghezza per scanf. |
Quando utilizzato con le funzioni scanf , indica una matrice di caratteri estesi; una volta utilizzato con le funzioni wscanf , indica una matrice a caratteri a byte singolo. In entrambi i casi, la matrice di caratteri deve essere sufficientemente grande per il campo di input più il carattere di terminazione null, che viene automaticamente aggiunto. |
Obbligatorio. La dimensione include lo spazio per un carattere di terminazione null. |
Gli identificatori A e a (vedere Caratteri di campo di tipo per printf) non sono disponibili con scanf.
La dimensione degli argomenti, se necessario, deve essere passata nell'elenco di parametri immediatamente dopo all'argomento a cui si applicano. Ad esempio, il seguente codice:
char string1[11], string2[9];
scanf("%10s %8s", string1, 11, string2, 9);
legge una stringa con una lunghezza massima di 10 in string1 e una stringa con una lunghezza massima di 8 in string2. Le dimensioni del buffer dovrebbero essere almeno una in più della larghezza specificata poiché deve essere riservato dello spazio per il terminatore null.
La stringa di formato può gestire caratteri di input a byte singolo o estesi indipendentemente dal fatto che il carattere a byte singolo o la versione a caratteri estesi della funzione venga utilizzato. Pertanto, per leggere un carattere a byte singolo o esteso mediante le funzioni scanf e le funzioni wscanf, utilizzare gli identificatori di formato come segue.
Per leggere il carattere come |
Utilizzare questa funzione |
Con questi identificatori di formato |
---|---|---|
a un byte |
Funzioni scanf |
c, hc o hC |
a un byte |
Funzioni wscanf |
C, hc o hC |
wide |
Funzioni wscanf |
c, lc o lC |
wide |
Funzioni scanf |
C, lc o lC |
Per analizzare le stringhe con le funzioni scanf e le funzioni wscanf, utilizzare la tabella precedente con gli identificatori di formato s e S anziché c e C.