C-Programmierung

Eingabe mit scanf()

Ausgabe mit printf | | Zufallszahlen

Die Eingabe von Zeichen, Werten und Zeichenketten von der Konsole erfolgt mit der Funktion scanf():

#include <stdio.h>

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:

%SWLU
ZeichenBezeichnungBedeutungmögliche Werte
SSkipzugehörigem Argument wird kein Wert zugewiesen, es wird übersprungen*
WWeitemaximale Zahl der einzulesenden Zeichenn *
LLängenangabeLänge des umzuwandelnden Arguments (Zeigertyp)hh, h, l, L, ll
UUmwandlungszeichenArt der Umwandlungd,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:

float f;
double d;

scanf("%f", &f);
scanf("%lf", &d);
int day,month,year;

printf("please enter a date: ");
assert( scanf("%d/%d/%d", &month, &day, &year) == 3 );
char string[100+1];

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

Options: