specifica la larghezza di scanf
Queste informazioni sono valide all'interpretazione delle stringhe di formato in scanf famiglia di funzioni, incluse le versioni sicure come scanf_s.Queste funzioni in genere si presuppone il flusso di input è suddivisa in una sequenza di token.I token vengono separati da uno spazio vuoto (spazio, scheda, o nuova riga) oppure, nel caso dei tipi numerici, la fine naturale di un tipo di dati numerico come indicato dal primo carattere che non può essere convertito in testo numerico.Tuttavia, la specifica della larghezza può essere utilizzata per forzare l'analisi di input a arrestare prima della fine naturale di un token.
larghezza la specifica è costituita da caratteri tra % e l'identificatore di campo del tipo, che può includere un numero intero positivo ha chiamato larghezza campo e uno o più caratteri che indicano la dimensione del campo, che può essere considerato come modificatori del tipo di campo, come un'indicazione di se il tipo integer viene short o tempo.Tali caratteri vengono definite il prefisso di dimensione.
Il campo della larghezza
la larghezza il campo è un Integer decimale positivo controllando il numero massimo di caratteri da leggere per quel campo.non più di larghezza i caratteri vengono convertiti e archiviati l'oggetto corrispondente argument.meno che larghezza i caratteri possono essere letti se uno spazio vuoto (spazio, scheda, o nuova riga) o un carattere che non può essere convertito in base al formato specificato si verifica prima larghezza viene raggiunto.
La specifica della larghezza viene separata e distinta dall'argomento della dimensione del buffer richiesto dalle versioni sicure di queste funzioni (ovvero, scanf_s, wscanf_s, e così via.).Nell'esempio seguente, la specifica della larghezza è 20, che indica che un massimo di 20 caratteri devono essere letti dal flusso di input.La lunghezza del buffer è 21, che include lo spazio per i 20 caratteri possibili più il terminatore null:
char str[21];
scanf_s("%20s", str, 21);
se larghezza il campo non viene utilizzato, scanf_s tenta di leggere l'intero token nella stringa.Se la dimensione specificata non è sufficiente utilizzare l'intero token, non verrà scritto nella stringa di destinazione.se larghezza il campo viene specificato, il primo larghezza i caratteri in token verranno scritti nella stringa di destinazione con il carattere di terminazione null.
Il prefisso di dimensione
i prefissi facoltativi h, ", ll, I64e " indicare la dimensione di argument (carattere lungo o breve, a byte singolo o carattere di tipo " wide ", a seconda del carattere tipo che modificano).Questi caratteri di specifica di formato vengono utilizzati con i caratteri tipi in scanf o wscanf funzioni per specificare interpretazione degli argomenti come illustrato nella tabella seguente.Il prefisso del tipo I64 è un'estensione Microsoft e non è ANSI compatibile.I caratteri tipi e i relativi significati vengono descritti “caratteri tipi per la tabella di funzioni denominate scanf„ in caratteri di campo del tipo di scanf.
[!NOTA]
h, "e " i prefissi sono estensioni Microsoft quando utilizzati con i dati di tipo char.
Ridimensionare i prefissi per gli identificatori di Formato-Tipo di wscanf e di scanf
Per specificare |
prefisso di utilizzo |
Con l'identificatore del tipo |
---|---|---|
double |
" |
e, g, , E-F, o g |
doppio lungo (equivalente del doppio) |
L |
e, g, , E-F, o g |
int lungo |
" |
d, i, o, x, o x |
intero senza segno esteso |
" |
u |
tempo tempo |
ll |
d, i, o, x, o x |
short int |
h |
d, i, o, x, o x |
breve intero senza segno |
h |
u |
int64 |
I64 |
d, i, o, u, x, o x |
Carattere a byte singolo con scanf |
h |
c o C# |
Carattere a byte singolo con wscanf |
h |
c o C# |
Carattere di tipo " wide " con scanf |
" |
c o C# |
Carattere di tipo " wide " con wscanf |
" |
c, o C# |
A un byte stringa di caratteri con scanf |
h |
s o s |
A un byte stringa di caratteri con wscanf |
h |
s o s |
Stringa di caratteri estesi con scanf |
" |
s o s |
Stringa di caratteri estesi con wscanf |
" |
s o s |
Nell'utilizzo di esempi h e " con scanf_s funzioni e wscanf_s funzioni:
scanf_s( "%ls", &x, 2 ); // Read a wide-character string
wscanf_s( "%hC",&x, 2 ); // Read a single-byte character
Se utilizza una funzione unsecure in scanf la famiglia, omette il parametro di dimensione che indica la lunghezza del buffer dell'argomento precedente.
Stringhe di Undelimited di lettura
Per leggere le stringhe non delimitate da spazi vuoti, un set di caratteri tra parentesi ()[]) può essere sostituito con s carattere tipo (string).Il set di caratteri tra parentesi viene definita una stringa del controllo.Il campo di input corrispondente viene letto fino al primo carattere che non è presente nella stringa del controllo.Se il primo carattere nel set è un cursore (^), l'effetto è invertito: Il campo di input viene letto fino al primo carattere presente nel resto del set di caratteri.
si noti che % [a-z] e % z-a [] vengono interpretati come equivalente a % [abcde… z].Si tratta di un insieme comune scanf estensione di funzione, ma si noti che lo standard ANSI non lo richiede.
Lettura delle stringhe non terminata
per memorizzare una stringa senza archiviare un carattere di terminazione null (" \ 0"), utilizzare la specifica %nc dove n è un Integer decimale.in questo caso, c il carattere tipo indica che l'argomento è un puntatore a una matrice di caratteri.Nell'n i caratteri vengono letti dal flusso di input nella posizione specificata e nessun carattere null (" \ 0 ") viene aggiunto.se n non viene specificato, il valore predefinito è 1.
Quando lo scanf la lettura di un campo
scanf la funzione analizza ogni campo di input, carattere per carattere.Può smettere di leggere un campo di input specifico prima di raggiungere uno spazio per diverse ragioni:
la larghezza specificata è stata raggiunta.
Il carattere successivo non può essere convertito come specificato.
I conflitti seguenti di carattere con un carattere nel controllo supporti che dovrebbe corrispondere a.
Il carattere successivo non viene visualizzato in un set di caratteri specificato.
per qualsiasi motivo, quando scanf la funzione smette di leggere un campo di input, il campo di input seguente viene considerata di iniziare al primo carattere non letto.Il carattere in conflitto, se c " è uno, viene considerato non letti e è il primo carattere del campo di input successiva o il primo carattere nelle operazioni di lettura successive nel flusso di input.
Vedere anche
Riferimenti
scanf, _scanf_l, wscanf, _wscanf_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
Campi di specifica di formato: funzioni di wscanf e di scanf