Eingabe mit scanf()
← Ausgabe mit printf | ● | Zufallszahlen →
Die Eingabe von Zeichen, Werten und Zeichenketten von der Konsole erfolgt mit der Funktion scanf()
:
int scanf(char *format, &...);
Der Format-String definiert die Zeichenkette, deren Umwandlungszeichen jeweils den einzulesenden Werten entsprechen. Die Umwandlungszeichen sind Platzhalter für zusätzliche Call-by-Reference Parameter. Der eingelesene Wert einer Umwandlung wird in dem zugehörigen Argument gespeichert.
Der Funktionswert von scanf()
entspricht der Anzahl der korrekt gelesenen und gespeicherten Umwandlungen.
Der Format-String kann auch normale Zeichen enthalten. In diesem Fall vergleicht die Funktion die gelesenen Zeichen mit den vorgegebenen Zeichen des Format-Strings. Ein Leerzeichen steht fĂĽr beliebig viel white-space. Falls kein passendes Zeichen vorliegt, bricht die Funktion vorzeitig mit der Anzahl der bisher gelesenen Umwandlungen ab. Zwischen einzelnen Umwandlungszeichen darf beliebig viel white-space vorkommen.
Die Umwandlungen im Format-string haben die vorgeschriebene Form:
Zeichen | Bezeichnung | Bedeutung | mögliche Werte |
---|---|---|---|
S | Skip | zugehörigem Argument wird kein Wert zugewiesen, es wird übersprungen | * |
W | Weite | maximale Zahl der einzulesenden Zeichen | n * |
L | Längenangabe | Länge des umzuwandelnden Arguments (Zeigertyp) | hh, h, l, L, ll |
U | Umwandlungszeichen | Art der Umwandlung | d,i,u o x,X f,g c,s |
Umwandlungszeichen U (Ausschnitt):
- d : die Umwandlung einer eingelesenen Ganzzahl wird dem passenden Argument zugewiesen
- i : die Umwandlung einer eingelesenen Ganzzahl wird dem passenden Argument zugewiesen (Präfix 0 und 0x erlaubt)
- u : ganze vorzeichenlose Zahl
- o : ganze vorzeichenlose Oktalzahl
- x,X : ganze vorzeichenlose Hexadezimalzahl
- e,f,g : Gleitpunktzahl
- c : ASCII-Zeichen (int *Argument)
- s : Zeichenkette (Achtung: das Einlesen bricht bei white space ab)
Beispiele:
double d;
scanf("%f", &f);
scanf("%lf", &d);
printf("please enter a date: ");
assert( scanf("%d/%d/%d", &month, &day, &year) == 3 );
scanf("%100s", string);
Achtung: Wird die Längenangabe bei Strings vergessen, können beliebig viele Zeichen gelesen werden und nicht reservierte Speicherbereiche überschrieben werden (Buffer-Overflow).
Tipp: Einlesen von Zeichenketten (mit Leerzeichen) mittels fgets()
.
← Ausgabe mit printf | ● | Zufallszahlen →