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); }