Die folgende Tabelle zeigt die Platzhalter, die für String-Ein-/Ausgabe-Funktionen der Standard-C-Library. Viele andere Funktionen bauen mit Hilfe der Standard Argumente-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 );