Freigeben über


scanf-Breitenangabe

Diese Informationen gelten für die Interpretation von Formatzeichenfolgen in der scanf Familie von Funktionen, einschließlich die sicheren Versionen wie scanf_s zu. Diese Funktionen nehmen normalerweise an, dass der Eingabestream in eine Sequenz von Token unterteilt wird. Token werden durch Leerstellen (Leerzeichen, Tabulatorzeichen oder Zeilenumbruch) oder im Fall der numerischen Typen, getrennt durch natürliche Ende eines numerischen Datentyps, wie vom ersten Zeichen festgelegt, das nicht in numerischen Text konvertiert werden kann. Allerdings wird die Breitenangabe verwendet werden, um die Analyse der Eingabe zu verursachen, vor den natürlichen Ende eines Tokens beenden.

Die Breitenangabe besteht aus Zeichen zwischen % und dem Typfeldspezifizierer, die möglicherweise eine positive ganze Zahl enthalten, die das Breitenfeld und eine oder mehrere Zeichen angeben der Größe des Felds aufgerufen wird, auch deren betrachtet werden kann als Modifizierertasten des Felds, z Angabe, ob der ganzzahlige Typ short oder long. Solche Zeichen wird als das Größenpräfix.

Das Breiten-Feld

Das Breitenfeld ist eine positive ganze Dezimalzahl, die die maximale Anzahl der für steuert dieses Feld zu lesende Zeichen. Nicht mehr als Breiten zeichen werden bei entsprechenden argument konvertiert und gespeichert. Weniger als Breitenzeichen gelesen werden kann, wenn ein Leerraumzeichen (Leerzeichen, Tabulatorzeichen oder Zeilenumbruch) oder einem Zeichen auftritt, nicht die gemäß dem angegebenen Format konvertiert werden können, bevor, Breite erreicht wird.

Die Breitenangabe ist getrennt und vom Puffergrößenargument abweichen, das durch die sicheren Versionen dieser Funktionen erforderlich sind (d. h, scanf_s, wscanf_s, z.). Im folgenden Beispiel ist die Breitenangabe 20 und angibt, dass bis 20 Zeichen im Eingabestream gelesen werden sollen. Die Pufferlänge ist 21, die für die Stelle möglichen 20 Zeichen sowie das Nullterminator enthält:

char str[21];
scanf_s("%20s", str, 21);

Wenn das Breitenfeld nicht verwendet wird, sind scanf_s Lese- das gesamte Token an die Zeichenfolge an. Wenn die Größe, die angegeben wird, nicht ausreicht, das gesamte Token enthält, wird nichts in der Zielzeichenfolge geschrieben. Wenn das Breitenfeld angegeben ist, dann werden die ersten Breitenzeichen im Token der Zielzeichenfolge zusammen mit dem Nullterminator geschrieben.

Das Größen-Präfix

Die optionalen Präfixe h, L, ll, I64 und L geben der Größe argument (lange oder kurz, nebeneinander oder Breitzeichen, abhängig vom Typzeichen, das sie ändern). Diese Formatangabenzeichen werden mit Typzeichen in scanf oder wscanf verwendet, um Funktionen Interpretation von Argumenten wie in der folgenden Tabelle dargestellt. Das Typpräfix I64 ist eine Microsoft-Erweiterung und ist nicht kompatibel ANSI. Das Typzeichen und ihre Bedeutungen sind in der "Typzeichen für scanf Funktionen" Tabelle in scanf-Typenfeldzeichen beschrieben.

Hinweis

h, L und L sind Microsoft-Erweiterungen Präfixe, wenn sie mit Daten des Typs char verwendet werden.

Größe stellt für scanf und wscanf Format-Typ-Spezifizierer voran

Angabe von

Präfix

Mit Typspezifizierer

double

L

e, E, f, g oder G

long double identisch (Double)

L

e, E, f, g oder G

langes int

L

d, I, o, w oder X

langes int ohne Vorzeichen

L

u

long long

ll

d, I, o, w oder X

short int

h

d, I, o, w oder X

kurzes int ohne Vorzeichen

h

u

int64

I64

d, I, o, u, w oder X

Einzelbytezeichen mit scanf

h

k oder C

Einzelbytezeichen mit wscanf

h

k oder C

Breitzeichen mit scanf

L

k oder C

Breitzeichen mit wscanf

L

k oder C

Einzelbyte-Zeichenfolge mit scanf

h

s oder S

Einzelbyte-Zeichenfolge mit wscanf

h

s oder S

Zeichenfolge mit Breitzeichen mit scanf

L

s oder S

Zeichenfolge mit Breitzeichen mit wscanf

L

s oder S

Im folgenden Beispiel wird h verwendet und L mit Funktionen scanf_s und wscanf_s-Funktionen:

scanf_s( "%ls", &x, 2 );     // Read a wide-character string
wscanf_s( "%hC",&x, 2 );    // Read a single-byte character

Wenn Sie eine unsichere Funktion in der scanf - Familie verwenden, kann der Größenparameter der Pufferlänge des vorherigen Arguments angibt weg.

Lesen Undelimited-Zeichenfolgen

Um die Zeichenfolgen zu lesen, die nicht von Leerraumzeichen begrenzt werden, kann mit einem Satz von Zeichen in Klammern ([ ]) das Typzeichen s (Zeichenfolge) ersetzt werden. Der Satz von Zeichen in Klammern wird als eine Steuerzeichenfolge. Das entsprechende Eingabefeld ist bis zum ersten Zeichen gelesen, das nicht in der Steuerzeichenfolge wird. Wenn das erste Zeichen im Satz eine Einfügemarke (^) ist, wird der Effekt umgekehrt: Das Eingabefeld ist bis zum ersten Zeichen gelesen, das im Rest des Zeichensatzes wird.

Beachten Sie, dass %[a-z] und %[z-a] als Äquivalent zu %[abcde...z] interpretiert werden. Dies ist eine allgemeine scanf-Funktionserweiterung, aber erwähnt, dass der ANSI-Standard dies nicht erfordert.

Lesen von Unterminated Zeichenfolgen

Um einer Zeichenfolge ohne ein NULL ("\ 0 " speichern zu speichern), verwenden Sie die Angabe %nk wobei n eine ganze Dezimalzahl ist. In diesem Fall gibt die k-Typzeichen an, dass das Argument ein Zeiger zu einem Zeichenarray ist. Die folgenden n-Zeichen werden im Eingabestream in die angegebene Position, gelesen und kein NULL-Zeichen ("\ 0 ") wird angefügt. Wenn n nicht angegeben wird, ist der Standardwert 1.

Wenn scanf gestoppt, ein Feld zu lesen

Die scanf-Funktion durchsucht jedes Bearbeitungsfeld, Buchstabe für Buchstabe. Sie wird möglicherweise auf, ein bestimmtes Eingabefeld zu lesen, bevor sie ein Leerzeichen aus mehreren Gründen erreicht:

  • Die angegebene Breite ist erreicht wurde.

  • Das nächste Zeichen kann nicht konvertiert werden, wie angegeben.

  • Die folgenden Zeichenkonflikte mit einem Zeichen im Steuerelement werden auf, dass sie übereinstimmen soll.

  • Das nächste Zeichen kann in einem angegebenen Zeichensatz werden nicht angezeigt.

Aus dem Grund immer wenn die scanf-Funktion beendet, ein Eingabefeld zu lesen, ist das folgende Eingabefeld betrachtet, am ersten ungelesenen Zeichen zu starten. Das in Konflikt stehende Zeichen, wenn eines wird, gilt als ungelesen ist und das erste Zeichen des folgenden Eingabefelds oder das erste Zeichen in den folgenden Lesevorgänge im Eingabestream.

Siehe auch

Referenz

scanf, _scanf_l, wscanf, _wscanf_l

scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l

Formatangabefelder: scanf- und wscanf-Funktionen

scanf-Typenfeldzeichen