B..4 Formatstring für scanf(), fscanf, etc.

Der Formatstring besteht aus einzulesenden Zeichen (!) und Steuersequenzen. In aller Regel will man die zu einzulesenden Zeichen nicht vorgeben, also besteht der Formatstring meist nur aus Steuersequenzen. Weiterhin kann im Formatstring white space vorkommen; (falls vorhanden) wird an dieser Stelle jeglicher white space im Eingabestrom überlesen und ignoriert.

Die Funktion scanf() und Ihre Anverwandten liefern als Rückgabewert die Anzahl der erfolgreich bearbeiteten Direktiven. Dabei wird %n aber nicht mitgezählt.

Jede Steuersequenz beginnt mit einem Prozentzeichen (%) und endet mit der eigentlichen Direktive (d, i, o, etc.):

Direktive: Argument: Eingabe: Besonderheiten:
%d int * ganze Dezimalzahl
%i (unsigned) int * ganze Zahl wie C-Konstanten, z.B. 27 (dezimal), 0x1b (sedezimal) oder 033 (oktal) Zahlenbasis ergibt sich aus dem Anfang der Zahl
%u unsigned int * nichtnegative Dezimalzahl
%o unsigned int * nichtnegative Oktalzahl
%x, %X unsigned int * nichtnegative Sedezimalzahl
%e%E%f%F, %g, %G float * Gleitkommazahl mit/ohne Vorzeichen, mit/ohne Exponent, z.B.
%c char * Zeichen white space wird nicht überlesen, sondern verwendet. 1 oder Feldbreite Zeichen werden gelesen. Es wird keine abschließende \0 angehängt.
%s char * Zeichenkette ohne white space Es wird eine abschließende \0 angehängt (gegebenenfalls zusätzlich zu einer angegebenen Feldbreite).
...

...
Direktive: Argument: Eingabe: Besonderheiten:
%[Zeichenfolge] char * alle Zeichen in Zeichenfolge white space wird nicht überlesen, sondern verwendet. Wenn ] in Zeichenfolge vorkommen soll, dann als erstes Zeichen, z.B. %[]ab]
%[^Zeichenfolge] char * alle Zeichen, die nicht in Zeichenfolge vorkommen white space wird nicht überlesen, sondern verwendet. Wenn ] in Zeichenfolge vorkommen soll, dann als erstes Zeichen, z.B. %[^]ab]
%p void ** sedezimale Adresse Eingabe wird nach void * konvertiert.
%n unsigned int * -- Die Anzahl bisher von diesem Formatstring eingelesenen Zeichen wird an der Stelle im Speicher hinterlegt, auf die das Argument zeigt (zählz nicht zum Rückgabewert).
%% -- Prozentzeichen % white space wird nicht überlesen.

Zwischen dem einleitenden Prozentzeichen und der Direktive darf eine Auswahl folgender Steuerbefehle eingesetzt werden (außer bei %%):

Steuerbefehl: Wirkung:
* Die Eingabe, die von dieser Direktive abgedeckt wird, soll überlesen und nicht gespeichert werden. Dementsprechend darf zu dieser Direktive auch kein Argument (siehe obige Tabelle) angegeben werden.
Feldbreite Anzahl der maximal zu lesenden Zeichen der Eingabe (positive ganze Zahl)
Typ Ein Buchstabe, der den Typ des erwarteten Arguments verändert (siehe oben):
h erwartet short int * statt int *.
l erwartet long int * statt int *,
bzw.
double * statt float *.
L erwartet long double * statt float *
.

AnyWare@Wachtler.de