Inhaltsverzeichnis
scanf()
Parameter
format | Formatzeichenkette |
… | weitere Argumente je nach Platzhalter |
Die Formatzeichenkette der scanf()
-Familie
kann neben gewöhnlichen Zeichen
Platzhalter für andere Werte besitzen.
Nach einem %
-Zeichen folgen optional
- ein
*
, das die Zuweisung der Eingabe an ein Argument unterdrückt, - eine ganzzahlige Längenangabe für die maximale Anzahl zu lesender Zeichen,
- ein Längen-Modifizierer wie
hh
bei Zeichen für Zahl-Eingabe,h
beishort int
,l
beilong
undlong float
(d.h.double
!) oderL
beilong double
,
Der Platzhalter wird zwingend abgeschlossen durch einen Konversionsbuchstaben:
d | dezimale Ganzzahl |
u | vorzeichenlose dezimale Ganzzahl |
i | Ganzzahl dezimal, oktal (0… ) oder hexadezimal (0x… ) |
o | Oktalzahl |
x | Hexadezimalzahl |
e , f , g | Fließkommazahl in (float ) bzw. (double ) |
c | Zeichen, auch whitespace (eins oder exakt so viele wie in Längenangabe) |
s | C-Zeichenkette (ein Wort ohne Leerzeichen) |
p | eine Speicheradresse |
n | Anzahl bisher gelesener Zeichen (in int* -Argument abzulegen) |
% | passt auf ein Prozentzeichen |
[…] | ein "scanset" für eine C-Zeichenkette |
Die Zeichen in den eckigen Klammern des "scanset" bilden die Menge zu akzeptierender Zeichen.
Dabei können Bereiche durch -
angegeben werden.
Steht als erstes Zeichen in der eckigen Klammer ein ^
,
werden die angegebenen Zeichen zurückgewiesen:
[A-Z]
akzeptiert alle Großbuchstaben,
[^0-9]
akzeptiert alles außer Ziffern.
Den Platzhaltern wird ein folgendes Argument mit einem passenden Typ zugeordnet.
Achtung:
Damit die Argumentvariablen Werte auf der Funktion übernehmen können,
müssen sie als Adressen &variable
an die Funktion übergeben werden.
Vorsicht: C-Zeichenkettenvariablen sind schon Adressen auf das Anfangszeichen.
Ergebnis
Rückgabewert: Anzahl der eingelesenen Variablen.
Die Funktion endet mit -1, wenn EOF
vor irgendeiner Konversion erreicht wurde.
Die Funktion beendet das Einlesen eines Platzhalters vor Erreichen eines whitespace-Zeichens
und geht weiter, wenn
- die angegebene Länge erreicht oder
- ein mit dem Platzhalter unverträgliches Zeichen erreicht wurde.
Die Funktion bricht ab, wenn
- das einzulesende Zeichen nicht mit dem entsprechenden normalen Zeichen der Formatzeichenkette übereinstimmt,
- ein Platzhalter mit dem aktuellen Zeichen der Eingabe nicht bedient werden kann. Die Werte ungelesener Argumentvariablen bleiben unverändert. Passen irgendein Platzhalter und der Argumenttyp (Zeiger!) nicht, ist das Verhalten undefiniert.
Siehe auch
Beispiel
- scanf.cpp
#include <cstdio> int main() { using namespace std; int i = -1; float f = -1; double d = -1; char str[20] = "nichts eingegeben"; printf("Gib eine Ganzzahl ein: "); scanf("%d", &i); printf("Gib eine gebrochene Zahl ein: "); scanf("%f", &f); printf("Gib noch eine gebrochene Zahl ein: "); scanf("%lf", &d); printf("Gib eine Zeichenkette aus max. 19 Grossbuchstaben ein: "); scanf(" %19[A-Z]", str); // ^Leerzeichen verschluckt führende whitespaces printf("Eingegeben: %d %f %f %s\n", i, f, d, str); }