Inhaltsverzeichnis

scanf()

#include <cstdio>

int scanf (const char *format, ...) 

Formatierte Eingabe von stdin.

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

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 Funktion bricht ab, wenn

Siehe auch

<iostream>, printf(), fscanf(), sscanf().

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