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 ( ); Tabstopp (\t); oder Zeilenumbruch (\n). Durch ein Leerzeichen liest scanf 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 liest scanf 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 bewirkt scanf , 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:

    %[*][width][{h|l|ll|I64|L}]type

    Hier, width, , h, lll, I64, und L stellt eine scanfBreite Spezifikation dar und type stellt ein scanfTypfeldzeichen 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, , soder 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_lwscanf_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