namespace cpp {}

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


kennen:lib:scanf
no way to compare when less than two revisions

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


kennen:lib:scanf [2019-11-20 16:15] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== scanf() ======
 +''#include'' [[..:include:cstdio]]
 +
 +<code cpp>
 +int scanf (const char *format, ...) 
 +</code>
 + 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
 +
 +  * ein ''*'', das die Zuweisung der Eingabe an ein Argument unterdrückt,
 +  * eine ganzzahlige Längenangabe für die maximale Anzahl zu lesender Zeichen,
 +  * ein Längen-Modifizierer wie 
 +    * ''hh'' bei Zeichen für Zahl-Eingabe,     
 +    * ''h'' bei ''short int'', 
 +    * ''l'' bei ''long'' und ''long float'' (d.h. ''double''!) oder
 +    * ''L'' 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.
 +
 +==== 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 angegebene Länge erreicht oder
 +  * ein mit dem Platzhalter unverträgliches Zeichen erreicht wurde.
 +Die Funktion bricht ab, wenn
 +  * das einzulesende Zeichen nicht mit dem entsprechenden normalen Zeichen der Formatzeichenkette übereinstimmt,
 +  * ein Platzhalter mit dem aktuellen Zeichen der Eingabe nicht bedient werden kann. Die Werte ungelesener Argumentvariablen bleiben unverändert. Passen irgendein Platzhalter und der Argumenttyp (Zeiger!) nicht, ist das Verhalten undefiniert.
 +
 +==== Siehe auch ====
 +[[..:include:iostream]],
 +[[printf]],
 +[[fscanf]],
 +[[sscanf]].
 +
 +==== Beispiel ====
 +<code cpp 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);
 +}
 +</code>
  
kennen/lib/scanf.txt · Zuletzt geändert: 2019-11-20 16:15 von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki