Syntax

 #include <stdio.h>
 int scanf(const char *format[, address, ...]);

Beschreibung

Liest und formatiert Eingabe aus dem Stream stdin.

Für eine Verwendung dieser I/O-Funktion in einer Windows-Anwendung siehe EasyWin.

Die Funktion scanf führt folgende Aktionen durch:

Für jedes Eingabefeld muss eine Formatieranweisung und Adresse existieren.
Eine scanf-Funktion kann mit dem Lesen eines Eingabefeldes oder mit dem gesamten Lesen vorzeitig abbrechen, ehe ein Feldendezeichen (Whitespace) erreicht wird.
Die Gründe dafür sind in "Wenn ...scanf-Funktionen abbrechen" beschrieben.

ACHTUNG:
scanf führt oft zu unerwarteten Ergebnissen, wenn sie von einem gegebenen Schema abweichen. Sie müssen berücksichtigen, wie scanf ein Zeilenende verarbeitet.
Die Kombination aus gets oder fgets gefolgt von sscanf ist sicher und einfach und daher der Verwendung von scanf vorzuziehen.

Rückgabewert:
Bei fehlerfreier Ausführung liefert die scanf-Funktion die Anzahl der Felder zurück, die erfolgreich gelesen, konvertiert und gespeichert wurden. Dieser Wert beinhaltet keine Felder, die zwar gelesen, jedoch nicht gespeichert wurden.
Im Falle eines Fehlers liefert scanf


Der scanf-Format-String

Der Format-String steuert die Art, wie jede ...scanf-Funktion die Eingabefelder liest, konvertiert und speichert.

Der Format-String ist ein Zeichenstring, der drei Arten von Objekten enthält:

Whitespace-Zeichen
Whitespace-Zeichen sind [Leerzeichen], [tab] (\t) oder [Neue-Zeile] (\n).
Wenn eine ...scanf-Funktion auf ein Whitespace-Zeichen im Format-String trifft, werden alle aufeinanderfolgenden Whitespace-Zeichen bis zum nächsten normalen Zeichen gelesen, aber nicht gespeichert.
Angehängte Whitespace-Zeichen (einschließlich [Neue-Zeile]) werden erst gar nicht gelesen, wenn sie nicht extra im Format-String angegeben sind.

Normale Zeichen
Normale Zeichen sind alle anderen ASCII-Zeichen außer dem Prozent-Zeichen (%).
Wenn eine ...scanf-Funktion auf ein normales Zeichen im Format-String trifft, wird das entsprechende normale Zeichen gelesen, aber nicht gespeichert.

Formatieranweisungen
Die Formatieranweisungen weisen die ...scanf-Funktionen an, Zeichen vom Eingabefeld zu lesen, in bestimmte Werte zu konvertieren und in der angegebenen Speicheradresse zu speichern.

Achtung:
Jede Formatieranweisung muss ein Adressenargument haben. Wenn mehr Formatieranweisungen als Adressen angegeben werden, kommt es zu unvorhersehbaren Ergebnissen.
Überzählige Adressenargumente werden ignoriert.


scanf Formatieranweisungen

In ...scanf-Format-Strings, haben Formatieranweisungen die folgende Form:

% [*] [width] [F|N] [h|l|L] type_char

Jede Formatieranweisung beginnt mit dem Prozentzeichen (%).

Nach dem Prozentzeichen % folgen in der unten stehenden Reihenfolge:

Komponente Optional/Obligatorisch Funktion/Auswirkung
[*] (Optional) Zeichen für Zuweisungsunterdrückung. Unterdrückt die Zuweisung des nächsten Eingabefeldes.
[width] (Optional) Breitenangabe. Maximale Anzahl der zu lesenden Zeichen. Es können weniger Zeichen gelesen werden, wenn die ...scanf-Funktion auf ein Whitespace-Zeichen oder ein nicht-auswertbares Zeichen trifft.
[F|N] (Optional) Zeigergrößenmodifikation. Überschreibt die Standardgröße der Adresse:
N = near-Zeiger
F = far-Zeiger
[h|l|L] (Optional) Argumenttypmodifikation
h = short int
l = long int, wenn type_char eine Integer-Konvertierung festlegt.
l = double, wenn type_char eine Gleitkommakonvertierung festlegt.
L = long double, (nur mit Gleitkommakonvertierung zulässig)
type_char (Obligatorisch) Typzeichen (siehe dort)


Eingabefelder für scanf-Funktionen

In einer ...scanf-Funktion sind die folgenden Zeichen als Eingabefelder definiert:

Typzeichen

Die Information in der folgenden Tabelle basiert auf der Annahme, dass keine optionalen Zeichen, Anweisungen oder Modifikationen (*, Breite oder Größe) in der Formatieranweisung enthalten sind.

Hinweis:
Einige Formatieranweisungen erwarten bestimmte Konventionen.
Typ Erwartete Eingabe Argumenttyp
Zahlen
dDezimal IntegerZeiger auf int (int *arg)
DDezimal IntegerZeiger auf long (long *arg)
e,EGleitkommaZeiger auf float (float *arg)
fGleitkommaZeiger auf float (float *arg)
g,GGleitkommaZeiger auf float (float *arg)
oOktal Integer Zeiger auf int (int *arg)
OOktal IntegerZeiger auf long (long *arg)
iDezimal, oktal oder hexadezimal IntegerZeiger auf int (int *arg)
IDezimal, oktal, od. hexadezimal Integer Zeiger auf long (long *arg)
uDezimal Integer vorzeichenlosZeiger auf unsigned int (unsigned int *arg)
UDezimal Integer vorzeichenlosZeiger auf unsigned long (unsigned long *arg)
xHexadezimal IntegerZeiger auf int (int *arg)
XHexadezimal IntegerZeiger auf int (int *arg)
Zeichen
sZeichen-StringZeiger auf Array mit chars (char arg[])
cZeichenZeiger auf char (char *arg), wenn eine Feldbreite zusammen mit dem Zeichen c (z.B. %5c) gegeben ist. Zeiger auf Array mit W-Zeichen (char arg[W])
%%-ZeichenKeine Konvertierung; % wird gespeichert
Zeiger
nZeiger auf int (int *arg): Die Anzahl der erfolgreich gelesenen Zeichen (bis zu %n) wird in int gespeichert.
pHexadezimale Form YYYY:ZZZZ oder ZZZZ Zeiger auf ein Objekt (far* or near*)
%p Standardkonvertierung, Zeigergröße abhängig vom Speichermodell