Formatspezifikationsfelder: scanf
und wscanf
Funktionen
Die hier aufgeführten Informationen gelten für die gesamte scanf
Funktionsfamilie, einschließlich der sicheren Versionen. Es beschreibt die Symbole, die verwendet werden, um den scanf
Funktionen mitzuteilen, wie der Eingabedatenstrom analysiert wird, z. B. den Eingabedatenstrom stdin
, in Werte, die in Programmvariablen eingefügt werden.
Das format
Argument ist eine Zeichenfolge, die die Interpretation der Eingabe angibt und eine oder mehrere von:
Leerzeichen: leer (
\t
); oder Zeilenumbruch (\n
). Durch ein Leerzeichen liestscanf
alle aufeinander folgenden Leerzeichen in der Eingabe bis zum nächsten Nichtleerzeichen, allerdings ohne zu speichern. Ein Leerzeichen im Format entspricht einer beliebigen Zahl (einschließlich 0) und einer Kombination von Leerzeichen in der Eingabe.Nichtleerzeichen, außer das Prozentzeichen (
%
). Durch ein Nichtleerzeichen liestscanf
ein entsprechendes Nichtleerzeichen, ohne es zu speichern. Wenn das nächste Zeichen im Eingabedatenstrom nicht übereinstimmt,scanf
wird beendet.Durch das Prozentzeichen (
%
) eingeführte Formatspezifikationen. Eine Formatspezifikation bewirktscanf
, dass Zeichen in der Eingabe in einen Wert eines angegebenen Typs gelesen und konvertiert werden. Der Wert wird einem Argument in der Argumentliste zugewiesen.Eine Formatspezifikation hat folgendes Format:
%
[][][][{|ll
||L
l
I64
h
|}]width
*
type
Hier,
width
, ,h
,ll
l
,I64
, undL
stellt einescanf
Breite Spezifikation dar undtype
stellt einscanf
Typfeldzeichen dar.
Die format
Argumentzeichenfolge wird von links nach rechts gelesen. Zeichen außerhalb der Formatspezifikationen werden mit der Abfolge von Zeichen im Eingabedatenstrom übereinstimmen. Die übereinstimmenden Zeichen im Eingabedatenstrom werden gescannt, aber nicht gespeichert. Wenn ein Zeichen im Eingabedatenstrom mit der Formatspezifikation in Konflikt steht, scanf
wird beendet und das Zeichen im Eingabedatenstrom verbleibt, als wäre es nicht gelesen worden.
Wenn die erste Formatspezifikation gefunden wird, wird der Wert des ersten Eingabefelds gemäß dieser Spezifikation konvertiert. Dieser Wert wird an der position gespeichert, die durch das erste Argument angegeben wird, das auf das format
Argument folgt. Die zweite Formatspezifikation bewirkt, dass das zweite Eingabefeld konvertiert und im nächsten Argument gespeichert wird usw. bis zum Ende der Formatzeichenfolge.
Ein Eingabefeld ist definiert als: Alle Zeichen bis zum ersten Leerzeichen (Leerzeichen, Tabstopp oder Neulinie) oder bis zum ersten Zeichen, das gemäß der Formatspezifikation nicht konvertiert werden kann, oder bis die Feldbreite (sofern angegeben) erreicht ist. Wenn zu viele Argumente für die angegebenen Spezifikationen vorhanden sind, werden die zusätzlichen Argumente zwar ausgewertet, aber ignoriert. Die Ergebnisse sind unvorhersehbar, wenn nicht genügend Argumente für die Formatspezifikation vorhanden sind.
Jedes Feld der Formatspezifikation ist entweder ein einzelnes Zeichen oder eine Zahl, das bzw. die eine bestimmte Formatoption darstellt. Das type
-Zeichen, das nach dem letzten optionalen Formatfeld angezeigt wird, bestimmt, ob das Eingabefeld als Zeichen, Zeichenfolge oder als Zahl interpretiert wird.
Die einfachste Formatspezifikation enthält nur das Prozentzeichen und ein type
-Zeichen (z.B. %s
). Wenn auf ein Prozentzeichen (%
) ein Zeichen folgt, das keine Bedeutung als Formatsteuerelementzeichen hat, werden dieses Zeichen und die folgenden Zeichen (bis zum nächsten Prozentzeichen) als normale Folge von Zeichen behandelt. Das heißt, sie werden als Eine Abfolge von Zeichen behandelt, die mit der Eingabe übereinstimmen müssen. Verwenden Sie z.B. %%
, um anzugeben, dass ein Prozentzeichen Eingabe darstellen soll.
Ein Sternchen (*
), gefolgt von einem Prozentzeichen, unterdrückt die Zuweisung des nächsten Eingabefelds, das als Feld des angegebenen Typs interpretiert wird. Das Feld wird gescannt, aber nicht in einem Argument gespeichert.
Die sicheren Versionen (die mit dem _s
Suffix) der scanf
Funktionsfamilie erfordern jeden Parameter vom Typ c
, C
, , s
oder S
[
es muss ein Puffergrößenparameter übergeben werden, unmittelbar danach übergeben werden. Weitere Informationen zu den sicheren Versionen der scanf
Funktionsfamilie finden Sie unterscanf_s
, , _scanf_s_l
, . _wscanf_s_l
wscanf_s
Siehe auch
scanf
Breite spezifikation
scanf
Feldzeichen eingeben
scanf
, , _scanf_l
wscanf
_wscanf_l
scanf_s
, , _scanf_s_l
wscanf_s
_wscanf_s_l