Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

fscanf, scanf, sscanf - formatiert lesen

&pagelevel(4)&pagelevel

Definition

#include <stdio.h>

int fscanf(FILE *stream, const char *format [, arglist])
int scanf(const char *format [, arglist]);
int sscanf(const char *s, const char *format [, arglist]);

Beschreibung

scanf() liest Bytes formatiert aus dem Standard-Eingabestrom stdin.

fscanf() liest Bytes formatiert aus dem Datenstrom, auf den stream zeigt.

sscanf() liest Bytes formatiert aus der Zeichenkette s.

Jede dieser Funktionen liest Bytes, wandelt sie gemäß den Angaben in der Formatzeichenkette format um und speichert die Ergebnisse in den Bereichen ab, die mit den eventuell vorhandenen Argumenten von arglist angegeben wurden.

format ist eine Zeichenkette, die in ihrem anfänglichen Umschaltmodus beginnt und endet, sofern einer definiert ist, und keine, eine oder mehrere Umwandlungsanweisungen enthält. format kann drei Arten von Zeichen enthalten:

  • Zeichen vom Typ char, die 1 : 1 in den Ausgabedatenstrom kopiert werden.

  • Zwischenraumzeichen, beginnend mit einem Gegenschrägstrich (\) (siehe isspace()).

  • Umwandlungsanweisungen, beginnend mit dem Prozentzeichen (%), von denen jede keinem, einem oder mehreren Argumenten in arglist zugeordnet wird. Wenn in arglist weniger Argumente übergeben werden, als in format festgelegt sind, ist das Ergebnis undefiniert. Wenn in format weniger Argumente festgelegt sind, als in arglist übergeben werden, werden die überflüssigen Argumente ignoriert.

fscanf() führt jede Anweisung einzeln aus. Wenn eine Anweisung fehlschlägt, wie unten genauer erläutert, kehrt die Funktion zurück. Fehler werden als Eingabefehler bezeichnet, wenn Eingabezeichen fehlen, oder als Formatfehler, wenn unpassende Eingabezeichen auftreten.

Eine Anweisung, die aus einem Zwischenraumzeichen besteht, wird so ausgeführt, dass die Eingabe bis zum ersten Byte gelesen wird, das kein Zwischenraumzeichen ist und selbst nicht gelesen wird, oder bis keine Bytes mehr gelesen werden können.

Eine Anweisung, die aus einem normalen Zeichen besteht, wird so ausgeführt, dass die nächsten Bytes aus der Eingabe gelesen werden. Wenn eines dieser Bytes sich von dem Zeichen der Anweisung unterscheidet, so schlägt die Anweisung fehl und das unpassende und alle nachfolgenden Bytes werden nicht gelesen.

Eine Anweisung, die eine Umwandlungsanweisung ist, definiert eine Menge von passenden Eingabefolgen, wie dies unten für jede einzelne Umwandlungsanweisung beschrieben wird. Eine Umwandlungsanweisung wird in den folgenden Schritten ausgeführt:

Die Eingabe von Zwischenraumzeichen wird überlesen, solange die Anweisung weder ein [ noch eines der Umwandlungszeichen c oder n enthält.

Ein Eingabeelement wird aus der Eingabe gelesen, solange die Anweisung nicht das Umwandlungszeichen n enthält. Ein Eingabeelement ist definiert als die längste Folge von Eingabezeichen (bis zu einer eventuell angegebenen maximalen Feldbreite), die ein Anfang einer passenden Folge ist. Das erste Byte nach einem Eingabeelement bleibt, sofern es vorhanden ist, ungelesen. Wenn die Länge des Eingabeelements gleich 0 ist, schlägt die Ausführung der Anweisung fehl; diese Bedingung bedeutet einen Formatfehler, solange nicht ein Fehler weitere Eingaben verhindert, was dann einen Eingabefehler bedeutet.

Außer im Fall des Umwandlungszeichens % wird das Eingabeelement, bzw. im Fall einer Umwandlungsanweisung % a die Anzahl der Eingabezeichen, umgewandelt in einen Datentyp, der dem Umwandlungszeichen entspricht. Wenn das Eingabeelement keine passende Folge ist, schlägt die Ausführung dieser Anweisung fehl: Diese Bedingung ist ein Formatfehler. Wenn nicht die Unterdrückung der Zuweisung durch das Zeichen * angegeben wurde, wird das Ergebnis der Umwandlung in dem Objekt abgelegt, welches das erste auf format folgende Argument ist, in dem bisher noch kein Umwandlungsergebnis abgelegt wurde. Wenn dieses Objekt nicht den passenden Datentyp hat oder wenn das Ergebnis der Umwandlung nicht in dem zur Verfügung stehenden Platz dargestellt werden kann, ist das Verhalten undefiniert.

Zeichen

Für die derzeitige Version des C-Laufzeitsystems gilt: Es sind nur Zeichen aus dem EBCDIC-Zeichensatz zugelassen.

Die scanf-Funktionen lesen das Eingabezeichen, jedoch ohne es umzuwandeln und in einer Variablen abzuspeichern. Stimmt das Eingabezeichen nicht mit dem in format angegebenen Zeichen überein, wird die Eingabebearbeitung abgebrochen.

Zwischenraumzeichen

Die Formatzeichenkette format kann beliebig viele oder keine Zwischenraumzeichen enthalten. Diese Zeichen haben keine Steuerfunktion.

Zwischenraumzeichen in der Eingabe werden als Trennzeichen zwischen Eingabefeldern behandelt und nicht mit umgewandelt (Ausnahme siehe %c und %[]). Führende Zwischenraumzeichen werden bei der Eingabe ignoriert.

Je nachdem, welche Funktionalität von scanf-Funktionen unterstützt werden soll, wird eine unterschiedliche Anzahl von Zwischenraumzeichen erkannt.

Zeichen

Bedeutung

Gültig für folgende Funktionalität

XPG4

ANSI (BS2000)

KR (BS2000)

'BLANK'

Leerzeichen

x

x

x

\n

Zeilenendezeichen

x

x

x

\t

horizontaler Tabulator

x

x

x

\f

Seitenwechsel

x

x

-

\v

vertikaler Tabulator

-

x

-

\r

Wagenrücklauf

-

x

-

Umwandlungsanweisungen (XPG4 Version 2)

Die Umwandlung kann auf das a-te Argument der Argumentliste arglist an Stelle des nächsten, unbenutzten Arguments angewendet werden. In diesem Fall wird das Umwandlungszeichen % durch die Zeichenfolge % a $ ersetzt, wobei a eine Dezimalzahl aus dem Wertebereich [1, {NL_ARGMAX}] ist, die angibt, welche Position das Argument in der Argumentliste besitzt. Diese Eigenschaft erlaubt die Definition von Formatzeichenketten, die Argumente entsprechend einer speziellen Landessprache auswählen. In Formatzeichenketten, die die Umwandlungsanweisung % a $ enthalten, ist nicht festgelegt, ob aufgezählte Elemente der Argumentliste arglist von der Formatzeichenkette format mehr als einmal referenziert werden können.

format kann sowohl % als auch % a $ als Umwandlungsanweisung enthalten. Innerhalb einer Formatzeichenkette dürfen aber nicht beide Formen gleichzeitig verwendet werden. Nur %% oder %* können mit der Form % a $ gemischt werden.

Alle Formen von fscanf() erlauben das Erkennen eines landessprach-spezifischen Dezimalzeichens in der Eingabezeichenkette. Das Dezimalzeichen wird durch die Lokalität des Progamms definiert (Kategorie LC_NUMERIC). In der Lokalität POSIX oder einer Lokalität, bei der das Dezimalzeichen nicht definiert ist, ist das Dezimalzeichen auf . (Punkt) voreingestellt.

Jede Umwandlungsanweisung wird entweder vom Zeichen % oder von der Zeichenfolge % a $ eingeleitet; darauf folgen die nachfolgend angegebenen Daten:

  • Ein optionales Zeichen * zur Unterdrückung der Zuweisung.

  • Eine optionale Ganzzahl ungleich 0, welche die maximale Feldbreite angibt.

  • Ein optionales Zeichen hh, h, l, ll, jzt oder L, das die Größe des aufnehmenden Objekts angibt.

  • Ein Umwandlungszeichen, das den Typ der durchzuführenden Umwandlung angibt.

Umwandlungsanweisungen können in XPG4-konformen Umgebungen wie folgt aussehen:

%[a$] [ n | *] { [{hh|h|l|ll|j|z|t}] {d|i|o|u|x|X} |
                [{hh|h|l|ll|j|z|t}] n |
                [l|L] {a|A|e|E|f|F|g|G} |
                [l] {[...]|[^...]|c|s} |
                {C|S|p} |
                % }

Umwandlungszeichen

l

l vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ Zeiger auf long int (d, i) bzw. unsigned long int  (o, u, x, X).

l vor aA, e, E, fF, g, G: Umwandlung eines Arguments vom Typ Zeiger auf double.

l vor c, s, oder [: Umwandlung eines Arguments vom Typ Zeiger auf wchar_t.

l vor n: Das Argument ist vom Typ Zeiger auf long int (keine Umwandlung).

ll

ll vor d, i, o, u, x, X : Umwandlung eines Arguments vom Typ long long int (d, i) bzw. unsigned long long int (o, u, x, X).

ll vor n: Das Argument ist vom Typ Zeiger auf long long int.

hh

hh vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ Zeiger auf signed char (d, i) bzw. unsigned char (o, u, x, X).

hh vor n: Das Argument ist vom Typ Zeiger auf signed char (keine Umwandlung).

h

h vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ Zeiger auf short int (d, i) bzw. unsigned short int (o, u, x, X).

h vor n: Das Argument ist vom Typ Zeiger auf short int (keine Umwandlung).

j

j vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ Zeiger auf long int (d, i) bzw. size_t (o, u, x, X).

j vor n: Das Argument ist vom Typ Zeiger auf intmax_t (keine Umwandlung).

z

z vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ Zeiger auf signed long int (d, i) bzw. size_t (o, u, x, X).

z vor n: Das Argument ist vom Typ Zeiger auf signed long int (keine Umwandlung).

t

t vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ Zeiger auf ptrdiff_t (d, i) bzw. unsigned long int (o, u, x, X).

t vor n: Das Argument ist vom Typ Zeiger auf ptrdiff_t (keine Umwandlung).

L

L vor aA, e, E, fF, g, G: Umwandlung eines Arguments vom Typ Zeiger auf long double.

d

Liest eine dezimale Ganzzahl ein, die auch mit einem Vorzeichen versehen sein kann. Deren Format ist dasselbe, das auch strtol() mit dem Wert 10 für base erwartet. Das entsprechende Argument sollte ein Zeiger auf int sein.

i

Liest eine dezimale Ganzzahl ein, die auch mit einem Vorzeichen versehen sein kann. Deren Format ist dasselbe, das auch strtol() mit dem Wert 0 für base erwartet. Das entsprechende Argument sollte vom Typ Zeiger auf int sein.

o

Liest eine oktale Ganzzahl ein, die auch mit einem Vorzeichen versehen sein kann. Deren Format ist dasselbe, das auch strtol() mit dem Wert 8 für base erwartet. Das entsprechende Argument sollte vom Typ Zeiger auf unsigned sein.

u        

Liest eine dezimale Ganzzahl ein, die auch mit einem Vorzeichen versehen sein kann. Deren Format ist dasselbe, das auch strtol() mit dem Wert 10 für base erwartet. Das entsprechende Argument sollte vom Typ Zeiger auf unsigned sein.

x, X

Liest eine hexadezimale Ganzzahl ein, die auch mit einem Vorzeichen versehen sein kann. Deren Format ist dasselbe, das auch strtol() mit dem Wert 16 für base erwartet. Das entsprechende Argument sollte vom Typ Zeiger auf unsigned sein.

a, A, e, E, f, F, g, G


Diese Umwandlungszeichen lesen eine Gleitpunktzahl ein, die auch mit einem Vorzeichen versehen sein kann. Deren Format ist dasselbe, das auch strtod() erwartet. Das entsprechende Argument sollte vom Typ Zeiger auf float sein.

s

Liest eine Folge von Bytes ein, die keine Zwischenraumzeichen sind. Das entsprechende Argument sollte ein Zeiger auf das erste Byte eines char-Vektors sein, der groß genug ist, um die Folge und ein abschließendes Nullbyte aufzunehmen, das automatisch angefügt wird.

S

liest eine Zeichenkette ohne Zwischenraumzeichen. Diese Zeichenkette wird wie mit mbstowcs() in eine Folge von Langzeichen umgewandelt. Das entsprechende Argument muss ein Zeiger auf das erste Byte eines Feldes vom Typ wchar_t sein. Das Feld muss groß genug sein, um das Ergebnis der Umwandlung und ein abschließendes Nullbyte, das automatisch hinzugefügt wird, aufnehmen zu können. Wenn die Feldgröße festgelegt ist, bestimmt sie die maximal akzeptierte Anzahl von Zeichen.

[

Liest eine nichtleere Folge von Bytes aus einer Menge von erwarteten Bytes (der Eingabemenge). Das entsprechende Argument sollte ein Zeiger auf das erste Byte eines char-Vektors sein, der groß genug ist, um die Folge und ein abschließendes Nullbyte aufzunehmen, das automatisch angefügt wird. Die Umwandlungsanweisung schließt alle folgenden Bytes in der Zeichenkette format ein, einschließlich der zugehörigen schließenden eckigen Klammer (]). Die Bytes zwischen den Klammern stellen die Eingabemenge dar, solange nicht das erste Byte nach der linken Klammer das Zeichen ^ ist. In diesem Fall enthält die Eingabemenge alle Bytes, die nicht in der Liste zwischen dem Zeichen ^ und der Klammer ] aufgeführt sind. Als Sonderfall gilt, dass die rechte eckige Klammer in den beiden Fällen, in denen die Umwandlungsanweisung mit den Zeichenketten [] bzw. [^] beginnt, zur Liste der Bytes gehört und erst die nächste rechte eckige Klammer diejenige ist, welche die Umwandlungsanweisung abschließt. Wenn das Zeichen - in der Liste auftritt und nicht das erste Zeichen bzw. das zweite Zeichen nach dem Zeichen ^ und auch nicht das letzte Zeichen ist, ist das Verhalten undefiniert.

c

Liest eine Folge von Bytes, deren Anzahl durch die Feldbreite bzw. durch 1, wenn keine Feldbreite angegeben ist, bestimmt wird. Das entsprechende Argument sollte ein Zeiger auf das erste Byte eines char-Vektors sein, der groß genug ist, um die Folge aufzunehmen. Ein abschließendes Nullbyte wird nicht angefügt. Das normale Überlesen von Zwischenraumzeichen wird in diesem Fall unterdrückt; um das nächste Byte zu lesen, das kein Zwischenraumzeichen ist, sollte %1s verwendet werden.

C

liest eine Zeichenkette der Länge, die durch die Feldgröße angegeben ist (1, wenn in dieser Anweisung keine Feldgröße angegeben ist). Die eingelesene Zeichenkette wird wie mit mbstowcs() in eine Folge von Langzeichen umgewandelt. Das entsprechende Argument muss ein Zeiger auf das erste Byte eines Feldes vom Typ wchar_t sein. Das Feld muss groß genug sein, um das Ergebnis der Umwandlung aufnehmen zu können. Es wird kein Nullbyte hinzugefügt.

Wenn die Zeichenfolge im Anfangs-Shiftzustand beginnt, ist die Umwandlung entsprechend der mbwstowcs()-Funktion; andernfalls ist das Verhalten undefiniert. Das übliche Überspringen von Zwischenraumzeichen unterbleibt in diesem Fall.

p

Liest eine Menge von Folgen, die denen entsprechen sollten, die von der Umwandlungsanweisung %p der printf-Funktionen erzeugt werden. p muss zu der Implementierung bei printf-Funktionen passen. Das entsprechende Argument sollte ein Zeiger auf einen Zeiger auf void sein. Die Interpretation des Eingabeelements ist jeweils implementierungsabhängig; für ein Eingabeelement, das nicht früher während derselben Programmausführung umgewandelt wurde, ist das Verhalten der Umwandlungsanweisung %p undefiniert. Dies gilt insbesondere für Zeigerausgaben, die von anderen Systemen erzeugt worden sind.

n

Es wird keine Eingabe verarbeitet. Das entsprechende Argument sollte ein Zeiger auf int sein, in das die bisher von diesem Aufruf gelesene Zahl der Eingabezeichen eingetragen wird. Die Ausführung einer Anweisung des Typs % a erhöht nicht den Zuweisungszähler, der bei Beendigung der Ausführung der Funktion zurückgeliefert wird.

%

Liest ein einzelnes %. Dabei findet keine Umwandlung oder Zuweisung statt. Die vollständige Umwandlungsanweisung lautet %%.

Wenn ein Umwandlungszeichen ungültig ist, ist das Verhalten scanf() undefiniert.

Wenn das Dateiende während der Eingabe gefunden wird, wird die Umwandlung abgebrochen. Wenn das Dateiende auftritt, bevor irgenwelche, zur aktuellen Anweisung passenden Bytes gelesen wurden (ungleich Zwischenraumzeichen, wo diese erlaubt sind), wird die Ausführung der aktuellen Anweisung mit einem Eingabefehler abgebrochen. Andernfalls wird, falls die Bearbeitung der aktuellen Anweisung nicht mit einem Formatfehler abbricht, die folgende Anweisung mit einem Eingabefehler abgebrochen, sofern diese vorhanden ist.

Wenn während eines sscanf-Aufrufs das Ende einer Zeichenkette erreicht wird, ist dies äquivalent zum Erreichen des Dateiendekennzeichens während eines fscanf-Aufrufs.

Wenn die Umwandlung wegen eines nicht passenden Zeichens abbricht, verbleibt dieses Byte ungelesen im Eingabestrom. Nachfolgende Zwischenraumzeichen (einschließlich der Zeilenendezeichen) bleiben ungelesen, solange dies nicht eine Anweisung macht. Der Erfolg des direkten Einlesens von Buchstaben und unterdrückten Zuweisungen kann nicht direkt bestimmt werden außer über die Anweisung % a.

BS2000
Umwandlungsanweisung (KR-Funktionalität)
(nur bei C/C++ Versionen kleiner V3 vorhanden)

Umwandlungsanweisungen enthalten Angaben, wie die Eingabefelder zu interpretieren und umzuwandeln sind. Sie können folgendermaßen aufgebaut sein:

% [ n | *] { [{h|l}] {d|o|x} |
            [l] {e|f} |
            [D|E|F|O|X} |
            {c|s} |
            {[...]|[^...]} |
            % }

Jede Umwandlungsanweisung muss mit einem Prozentzeichen (%) beginnen. Die restlichen Zeichen werden wie folgt interpretiert:

*

Überspringen einer Zuweisung.
Das nächste Eingabefeld wird zwar gelesen und umgewandelt, aber in keiner Variablen abgespeichert. 

n

Maximale Länge des umzuwandelnden Eingabefeldes.
Tritt vorher ein Zwischenraumzeichen oder ein Zeichen auf, das nicht zur Typangabe in der Umwandlungsanweisung passt, wird die Länge entsprechend gekürzt. 

l

l vor d, o, x:
Umwandlung eines Arguments vom Typ Zeiger auf long int (d) bzw. unsigned long int (o, x). Die Angabe ist identisch mit den Großbuchstaben D, O, X.

l vor e, f:
Umwandlung eines Arguments vom Typ Zeiger auf double.
Die Angabe ist identisch mit den Großbuchstaben E, F. 

h

h vor d, o, x:
Umwandlung eines Arguments vom Typ Zeiger auf short int (d) bzw. unsigned short int (o, x). 

d

Ein dezimaler ganzzahliger Wert wird erwartet. Das entsprechende Argument muss ein Zeiger auf int sein. 

o

Ein oktaler ganzzahliger Wert wird erwartet. Das entsprechende Argument kann ein Zeiger auf unsigned int oder int sein. Intern wird der Wert unsigned dargestellt. 

x    

Ein hexadezimaler int-Wert wird erwartet. Das entsprechende Argument kann ein Zeiger auf unsigned int oder int sein. Intern wird der Wert unsigned dargestellt.

e, f

Eine Gleitpunktzahl wird erwartet. Das entsprechende Argument muss ein Zeiger auf float sein. Die Gleitpunktzahl kann ein Vorzeichen enthalten sowie einen Exponenten (E bzw. e, gefolgt von einem ganzzahligen Wert).
Das Dezimalzeichen wird durch die Lokalität (Kategorie LC_NUMERIC) beeinflusst. Voreingestellt ist der Punkt.

c

Ein Zeichen wird erwartet. Das entsprechende Argument sollte ein Zeiger auf char sein. scanf() liest in diesem Fall auch Leerzeichen ein. Um das nächste Zeichen ungleich Leerzeichen einzulesen, ist %1s zu verwenden.
c eignet sich dazu, Zeichenketten einzulesen, die auch Leerzeichen enthalten:
Dazu ist als Argument ein Zeiger auf einen char-Vektor zu übergeben und eine Feldlänge n anzugeben (z.B. %10c). scanf() schließt in diesem Fall die Zeichenkette nicht automatisch mit dem Nullbyte ab.

s

Eine Zeichenkette wird erwartet. Das entsprechende Argument muss ein Zeiger auf einen char-Vektor sein und groß genug, um die Zeichenkette und ein abschließendes Nullbyte aufnehmen zu können. scanf() schließt die Zeichenkette automatisch mit dem Nullbyte ab. Führende Zwischenraumzeichen in der Eingabe werden ignoriert, ein nachfolgendes Zwischenraumzeichen wird als Trennzeichen (Ende der Zeichenkette) interpretiert.

[ ]

Eine Zeichenkette wird erwartet. Das entsprechende Argument muss ein Zeiger auf einen char-Vektor sein und groß genug, um die Zeichenkette inklusive des automatisch angefügten Nullbytes aufnehmen zu können. Im Unterschied zu %s fungieren bei dieser Angabe Leerzeichen nicht automatisch als Trennzeichen.

[...]

Bei dieser Angabe werden solange Zeichen eingelesen, bis das erste Zeichen auftritt, das nicht in den eckigen Klammern angegeben ist. D.h., die Zeichenkette darf nur aus den Zeichen in [ ] bestehen; alle anderen Zeichen gelten als Trennzeichen.

[^...]

Bei dieser Angabe werden solange Zeichen eingelesen, bis eines von den Zeichen auftritt, die in den eckigen Klammern nach ^ angegeben sind. Nur die in [ ] angegebenen Zeichen gelten als Trennzeichen.

%

Eingabe des Zeichens %, keine Umwandlung. (Ende)

BS2000
Umwandlungsanweisung (ANSI-Funktionalität)

Umwandlungsanweisungen enthalten Angaben, wie die Eingabefelder zu interpretieren und umzuwandeln sind. Sie können folgendermaßen aufgebaut sein:

% [ n | *] { [{hh|h|l|ll|j|z|t}] {d|i|o|u|x|X} |
            [{hh|h|l|ll|j|z|t}] n |
            [l|L] {a|A|e|E|f|F|g|G} |
             p |
            [l] {[...]|[^...]|c|s} |
            % }

Jede Umwandlungsanweisung muss mit einem Prozentzeichen (%) beginnen. Die restlichen Zeichen werden wie folgt interpretiert:

*

Überspringen einer Zuweisung. Das nächste Eingabefeld wird zwar gelesen und umgewandelt, aber in keiner Variablen abgespeichert.

n

Maximale Länge des umzuwandelnden Eingabefeldes. Tritt vorher ein Zwischenraumzeichen oder ein Zeichen auf, das nicht zur Typangabe in der Umwandlungsanweisung passt, wird die Länge entsprechend gekürzt.

l

l vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ Zeiger auf long int (d, i) bzw. unsigned long int  (o, u, x, X).

l vor aA, e, E, fF, g, G: Umwandlung eines Arguments vom Typ Zeiger auf double.

l vor c, s, oder [: Umwandlung eines Arguments vom Typ Zeiger auf wchar_t.

l vor n: Das Argument ist vom Typ Zeiger auf long int (keine Umwandlung).

ll

ll vor d, i, o, u, x, X : Umwandlung eines Arguments vom Typ long long int (d, i) bzw. unsigned long long int (o, u, x, X).

ll vor n: Das Argument ist vom Typ Zeiger auf long long int.

hh

hh vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ Zeiger auf signed char (d, i) bzw. unsigned char (o, u, x, X).

hh vor n: Das Argument ist vom Typ Zeiger auf signed char (keine Umwandlung).

h

h vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ Zeiger auf short int (d, i) bzw. unsigned short int (o, u, x, X).

h vor n: Das Argument ist vom Typ Zeiger auf short int (keine Umwandlung).

j

j vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ Zeiger auf long int (d, i) bzw. size_t (o, u, x, X).

j vor n: Das Argument ist vom Typ Zeiger auf intmax_t (keine Umwandlung).

z

z vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ Zeiger auf signed long int (d, i) bzw. size_t (o, u, x, X).

z vor n: Das Argument ist vom Typ Zeiger auf signed long int (keine Umwandlung).

t

t vor d, i, o, u, x, X: Umwandlung eines Arguments vom Typ Zeiger auf ptrdiff_t (d, i) bzw. unsigned long int (o, u, x, X).

t vor n: Das Argument ist vom Typ Zeiger auf ptrdiff_t (keine Umwandlung).

L

L vor aA, e, E, fF, g, G: Umwandlung eines Arguments vom Typ Zeiger auf long double.

d

Ein dezimaler ganzzahliger Wert wird erwartet. Das entsprechende Argument muss ein Zeiger auf int sein.

i

Ein ganzzahliger Wert wird erwartet. Die Basis (hexadezimal, oktal, dezimal) wird aus dem Aufbau des Eingabefeldes ermittelt. Führendes 0x oder 0X: hexadezimal. Führende 0: oktal. Sonst: dezimal. Das entsprechende Argument muss ein Zeiger auf int sein.

o

Ein oktaler int-Wert wird erwartet. Das entsprechende Argument kann ein Zeiger auf unsigned int oder int sein. Intern wird der Wert unsigned dargestellt.

u    

Ein dezimaler int-Wert wird erwartet. Das entsprechende Argument muss ein Zeiger auf unsigned int sein.

x, X

Ein hexadezimaler int-Wert wird erwartet. Das entsprechende Argument kann ein Zeiger auf unsigned int oder int sein. Intern wird der Wert unsigned dargestellt.

a, A, e, E, f, F, g, G


Eine Gleitpunktzahl wird erwartet. Das erwartete Format ist dasselbe, das auch von den strtod()-Funktionen erwartet wird. Das entsprechende Argument muss ein Zeiger auf float sein. Das Dezimalzeichen wird durch die Lokalität (Kategorie LC_NUMERIC) beeinflusst. Voreingestellt ist der Punkt.

c

Ohne Umwandlungszeichen l:
Ein Zeichen wird erwartet. Das entsprechende Argument sollte ein Zeiger auf char sein. scanf() liest in diesem Fall auch Leerzeichen ein. Um das nächste Zeichen, das kein Leerzeichen ist, einzulesen, ist %1s zu verwenden. c eignet sich dazu, Zeichenketten einzulesen, die auch Leerzeichen enthalten: Dazu ist als Argument ein Zeiger auf einen char-Vektor zu übergeben und eine Feldbreite n anzugeben (z.B. %10c). scanf() schließt in diesem Fall die Zeichenkette nicht automatisch mit dem Nullbyte ab.

Mit Umwandlungszeichen l:
Es wird eine Multibyte-Zeichenkette erwartet, die im „initial shift“-Zustand beginnt. Die Multibyte-Zeichen werden in Langzeichen konvertiert (wie durch mbrtowc(); das zugehörige mbstate_t-Objekt wird vor Konvertierung des ersten Multibyte-Zeichens mit Null initialisiert). Das entsprechende Argument muss ein Zeiger auf das erste Element eines Feldes vom Typ wchar_t sein, das groß genug ist, um die resultierende Folge aufzunehmen. Es wird kein abschließendes Null-Langzeichen angefügt.

p

Ein 8-stelliger Zeigerwert wird erwartet, analog dem Format %08.8x. Das entsprechende Argument muss vom Typ Zeiger auf einen Zeiger auf void sein.

s

Ohne Umwandlungszeichen l:
Eine Zeichenkette wird erwartet. Das entsprechende Argument muss ein Zeiger auf einen char-Vektor sein und groß genug, um die Zeichenkette und ein abschließendes Nullbyte aufnehmen zu können. scanf() schließt die Zeichenkette automatisch mit dem Nullbyte ab. Führende Zwischenraumzeichen in der Eingabe werden ignoriert, ein nachfolgendes Zwischenraumzeichen wird als Trennzeichen (Ende der Zeichenkette) interpretiert.

Mit Umwandlungszeichen l:
Es wird eine Multibyte-Zeichenkette erwartet, die im „initial shift“-Zustand beginnt. Die Multibyte-Zeichen werden in Langzeichen konvertiert (wie durch mbrtowc(); das zugehörige mbstate_t-Objekt wird vor Konvertierung des ersten Multibyte-Zeichens mit Null initialisiert). Das entsprechende Argument muss ein Zeiger auf einen wchar_t-Vektor sein und groß genug, um die resultierende Langzeichenkette und ein abschließendes Null-Langzeichen aufnehmen zu können: scanf schließt die Langzeichenkette automatisch mit dem Null-Langzeichen ab. Führende Zwischenraumzeichen in der Eingabe werden ignoriert, ein nachfolgendes Zwischenraumzeichen wird als Trennzeichen (Ende der Langzeichenkette) interpretiert.

[]

Ohne Umwandlungszeichen l:
Eine Zeichenkette wird erwartet. Das entsprechende Argument muss ein Zeiger auf einen char-Vektor sein und groß genug, um die Zeichenkette inklusive des automatisch angefügten Nullbytes aufnehmen zu können. Im Unterschied zu %s fungieren bei dieser Angabe Leerzeichen nicht automatisch als Trennzeichen.

Mit Umwandlungszeichen l:
Es wird eine Multibyte-Zeichenkette erwartet, die im „initial shift“-Zustand beginnt. Die Multibyte-Zeichen werden in Langzeichen konvertiert (wie durch mbrtowc(); das zugehörige mbstate_t-Objekt wird vor Konvertierung des ersten Multibyte-Zeichens mit Null initialisiert). Das entsprechende Argument muss ein Zeiger auf einen wchar_t-Vektor sein und groß genug, um die resultierende Langzeichenkette und ein abschließendes Null-Langzeichen aufnehmen zu können: scanf() schließt die Langzeichenkette automatisch mit dem Null-Langzeichen ab.

[...]

Bei dieser Angabe werden solange Zeichen eingelesen, bis das erste Zeichen auftritt, das nicht in den eckigen Klammern angegeben ist. D.h., die Zeichenkette darf nur aus den Zeichen in [ ] bestehen; alle nicht angegebenen Zeichen gelten als Trennzeichen. Die schließende Klammer ] kann in die Liste der einzulesenden Zeichen aufgenommen werden, wenn sie als erstes Zeichen unmittelbar nach der öffnenden Klammer angegeben wird: [ ]...].

[^...]

Bei dieser Angabe werden solange Zeichen eingelesen, bis eines von den Zeichen auftritt, die in den eckigen Klammern nach ^ angegeben sind. Nur die in [ ] angegebenen Zeichen gelten als Trennzeichen. Die schließende Klammer ] kann in die Liste der Trennzeichen aufgenommen werden, wenn sie als erstes Zeichen unmittelbar nach dem Zeichen ^ angegeben wird: [^]...].

n

Es werden keine Zeichen vom Eingabefeld gelesen. Das Argument ist vom Typ Zeiger auf int. Dieser ganzzahligen Variablen wird die Anzahl der Zeichen zugewiesen, die scanf() bis zu diesem Zeitpunkt verarbeitet hat.

%

Eingabe des Zeichens %, keine Umwandlung. (Ende)

fscanf() und scanf() können die Strukturkomponente st_atime für die Datei aktualisieren, der stream zugeordnet ist. st_atime wird aktualisiert, sobald fgetc()fgets(), fgetwc(), fgetws(), fread(), fscanf(), getc(), getchar(), gets() oder scanf() erfolgreich für stream aufgerufen werden und Daten zurückliefern, die nicht durch einen vorangegangenen Aufruf von ungetc() oder ungetwc() bereitgestellt wurden.

Returnwert

Anzahl der erfolgreich gelesenen und zugewiesenen Eingabeelemente



bei erfolgreicher Beendigung.


0

wenn gleich zu Beginn ein nicht zur Formatzeichenkette passendes Eingabezeichen gefunden wird.


EOF

wenn die Eingabe vor dem ersten Konflikt zwischen Eingabezeichen und Formatzeichenkette oder vor der ersten Umwandlung endet. Im Unterschied zu XPG4 wird errno nicht gesetzt.

Hinweise

Wenn die Anwendung, die fprintf() aufruft, Objekte des Typs wchar_t enthält, muss sie auch sys/types.h oder stddef.h einbinden, damit dieser Datentyp definiert ist.

In Formatzeichenketten, die die Form % für die Umwandlungs-Anweisungen enthalten, wird jedes Argument der Argumentliste genau einmal verwendet. In Formatzeichenketten, die die Form mit % a $ für die Umwandlungs-Anweisungen enthalten, kann jedes nummerierte Argument der Argumentliste so oft verwendet werden, wie nötig.

Bei der Umwandlung von int-Werten in unsigned int (Umwandlungszeichen o, u, x, X) wird aus einem Wert mit negativem Vorzeichen das Zweierkomplement gebildet.
Z.B. liefert Format %u bei der Eingabe -1 X’FFFFFFFF’.

Den Returnwert eines scanf-Aufrufes sollten Sie immer abfragen, um sicher zu sein, dass kein Fehler passiert ist!

Der nächste scanf-Aufruf startet mit dem Lesen unmittelbar nach dem Zeichen, das als letztes vom vorherigen Aufruf verarbeitet wurde.

Wenn ein Eingabezeichen nicht dem angegebenen Format entspricht, wird es in den Eingabepuffer zurückgeschrieben. Es muss dort mit getc() abgeholt werden, sonst erhält der nächste scanf-Aufruf dasselbe Zeichen noch einmal.

BS2000

Bei Textdateien mit der Zugriffsart SAM und variabler Satzlänge, für die zusätzlich eine maximale Satzlänge angegeben ist, gilt: Wenn bei fopen() die Angabe split=no gemacht wurde, werden Sätze maximaler Länge beim Lesen nicht mit dem darauffolgenden Satz verkettet. Standardmäßig oder mit der Angabe split=yes wird beim Lesen eines Satzes mit maximaler Satzlänge angenommen, dass es sich bei dem Folgesatz um die Fortsetzung dieses Satzes handelt, und die Sätze werden verkettet. (Ende)

Ob fscanf() für eine BS2000- oder eine POSIX-Datei ausgeführt wird, hängt von der Programmumgebung ab.

Siehe auch

getc(), printf(), setlocale(), strtod(), strtol(), langinfo.h, stdio.h.