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
*
, das die Zuweisung der Eingabe an ein Argument unterdrückt,hh
bei Zeichen für Zahl-Eingabe, h
bei short int
, l
bei long
und long float
(d.h. double
!) oderL
bei long 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.
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 Funktion bricht ab, wenn
#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); }