Die folgende Tabelle zeigt die Platzhalter, die für String-Ein-/Ausgabe-Funktionen der Standard-C-Library. Viele andere Funktionen bauen mit Hilfe der stdarg-Library auf den Standardfunktionen auf, die Tabelle gilt also auch für viele andere Funktionen.
Integers | ||
---|---|---|
Sonderzeichen | Bedeutung | Beispiele |
%d | Integer (32 Bit, mit Vorzeichen) | 31; -31 |
%i | Integer (32 Bit, mit Vorzeichen) | 31; -31 |
%u | Integer (32 Bit, positiv, ohne Vorzeichen) | 31 |
%x | integer in hexadezimaler Schreibweise (hex, kein Standard!), kleine Buchstaben | 1f |
%X | integer in hexadezimaler Schreibweise (hex, kein Standard!) | 1F |
%o | Integer in oktaler Schreibweise | 37 |
%p | Pointer | |
Fließkommazahlen | ||
Sonderzeichen | Bedeutung | Beispiele |
%f | Fließkommazahl | 47.11 |
%e | Fließkommazahl in Exponentialdarstellung (kleines e) | 4.711e+1 |
%E | Fließkommazahl in Exponentialdarstellung (großes E) | 4.711E+1 |
Buchstaben und Strings | ||
Sonderzeichen | Bedeutung | Beispiele |
%c | Wert als ASCII-Zeichen (character) | a |
%s | Adresse als Zeichenkette (String) | Hallo proggen.org |
Sonstiges | ||
Sonderzeichen | Bedeutung | Beispiele |
%n | Bisher gedruckte Zeichen auf einen Pointer (auf ein signed int) schreiben | |
%% | Druckt ein (nur ein!) Prozentzeichen | % |
Diese Platzhalter können auch nach folgendem Muster formatiert werden:
%[Flags][Feldbreite][.][Genauigkeit][Eingabetyp]Platzhaltertyp
Bis auf den Platzhaltertyp sind alle Angaben optional.
Zeichen | Bedeutung | Beispiele |
---|---|---|
- | linksbündig in der Feldbreite | „4711 “ |
+ | Erzwingt ein Vorzeichen auch bei positiven Zahlen | „ +4711“ |
-Leerzeichen- | Die Feldbreite wird mit Leerzeichen vor der Zahl aufgefüllt | „ 4711“ |
# | Erzwingt eine Beschreibung der Zahlenbasis (0 für Oktal, 0x/0X für Hexadezimal ) bei Fließkommazahlen (E, e) folgt ein Punkt, auch wenn keine Nachkommastellen gedruckt werden, bei G und g werden die nachfolgenden Nullen nicht entfernt | „0123“, „0xbadc0de“, „4711.“ |
0 | Die Feldbreite wird mit Nullen vor der Zahl aufgefüllt | „00004711“ |
Wird eine Zahl angegeben, so wird für diesen Platzhalter mindestens diese Breite reserviert. Passt der einzufügende Inhalt nicht in den Platzhalter, so wird mehr Platz verwendet - es wird nicht abgeschnitten. Ist der einzufügende Inhalt kürzer, so wird der Platz entsprechend der Flags aufgefüllt (per Voreinstellung mit Leerzeichen).
Wird ein * angegeben, so folgt ein zusätzliches Integer-Argument in der Parameterliste, der die Feldbreite angibt und zwar vor dem Argument, das ausgegeben wird.
Beispiel:
printf( "[%*s]\n", 10, "Hallo" ); printf( "[%-*s]\n", 10, "Hallo" );
Ausgabe:
[ Hallo] [Hallo ]
Die Genauigkeit gibt an, wie ab wann eine Ausgabe gekürzt wird.
Dies ist abhängig von Platzhaltertyp.
Platzhaltertyp | Beschreibung | Beispiel | Eingabe | Ausgabe |
---|---|---|---|---|
Integer | Gibt die minimale Zahl zu schreibender Ziffern an, fehlende Ziffern werden vorangestellte Nullen aufgefüllt. Längere Integerzahlen werden nicht gekürzt. Wird 0 angegeben, so wird der Wert 0 nicht gedruckt. | %.10d | 10 | „0000000010“ |
f | Anzahl der zu druckenden Ziffern nach dem Dezimalpunkt | %.3f | 10.1234567 | „10.123“ |
e, E | Anzahl der zu druckenden Ziffern nach dem Dezimalpunkt | %.3e | 10.1234567 | „1.012e+01“ |
g, G | Anzahl der zu druckenden Ziffern | %.5g | 10.1234567 | „10.123“ |
s | Anzahl der zu druckenden Zeichen | %.5s | „Hallo proggen.org“ | „Hallo“ |
s | Zusätzliches Argument, der dieses Argument beschreibt | %.*s | 5, „Hallo proggen.org“ | „Hallo“ |
Beispiel:
printf( "[%-.*s]\n", 5, "Hallo" ); printf( "[%-*.*s]\n", 10, 5, "Hallo" ); printf( "[%*.*s]\n", 10, 5, "Hallo" );
Ausgabe:
[Hallo] [Hallo ] [ Hallo]
Der Eingabetyp beschreibt das Format des Parameters - also der Variable, die ausgegeben werden soll.
Kürzel | Platzhaltertyp | Interpretation |
---|---|---|
h | i, d, o, u, x, X | Das Argument wird als short int (hd) oder unsigned short int (hu) interpretiert |
l | i, d, o, u, x, X | Das Argument wird als long int (ld) oder unsigned long int (lu) interpretiert |
t | i, d, o | Das Argument wird entsprechend der Größe von ptrdiff_t verwendet |
z | u, x, X | Das Argument wird entsprechend der Größe von size_t verwendet |
l | c, s | Das Argument wird als wide char (lc) oder wide string (ls) interpretiert |
L | e, E, f, g, G | Das Argument wird als long double interpretiert |
Funktion | Bedeutung |
---|---|
fprintf | Formatierte Ausgabe in einen Stream |
fscanf | Formatiertes Lesen aus einem Stream |
printf | Formatierte Ausgabe auf den stdout-Stream |
scanf | Formatiertes Lesen aus aus dem stdin-Stream |
sprintf | Formatierte Ausgabe auf einen C-String (char-Array) |
sscanf | Formatiertes Lesen aus einem C-String (char-Array) |
vfprintf | Formatierte Ausgabe in einen Stream mit Parameterliste |
vprintf | Formatierte Ausgabe auf den stdout-Stream mit Parameterliste |
vsprintf | Formatierte Ausgabe auf einen C-String (char-Array) |
int integer = -4711; double floatingPoint = 4711.0815; char string[] = "Hallo proggen.org"; /* Integer */ printf( "Mit Vorzeichen: %d - ohne Vorzeichen: %u", integer, integer ); printf( "Hexadezimal (kein Standard): %x\n", integer ); printf( "Oktal : %o\n", integer ); /* Fließkommazahlen */ printf( "Fließkommazahl : %f\n", floatingPoint ); printf( "Exponential : %e\n", floatingPoint ); /* Buchstaben und Strings */ printf( "Buchstabe : %c\n", string[0] ); printf( "Buchstaben : %c%c%c%c%c\n", string[0], string[11], string[2], string[3], string[4] ); printf( "String : %s\n", string );