====== Platzhalter für String-Funktionen ======
Die folgende Tabelle zeigt die Platzhalter, die für String-Ein-/Ausgabe-Funktionen der Standard-C-Library. Viele andere Funktionen bauen mit Hilfe der [[c:lib:stdarg:start]]-Library auf den Standardfunktionen auf, die Tabelle gilt also auch für viele andere Funktionen.
===== Platzhaltertypen =====
^ 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 | % |
===== Formatierung =====
Diese Platzhalter können auch nach folgendem Muster formatiert werden:
%[Flags][Feldbreite][.][Genauigkeit][Eingabetyp]Platzhaltertyp
Bis auf den Platzhaltertyp sind alle Angaben optional.
==== Flags ====
^ 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" |
==== Feldbreite ====
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 ]
==== Genauigkeit ====
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]
==== Eingabetyp ====
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 |
===== Die Platzhalter werden bei folgenden Funktionen verwendet =====
^ 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) |
===== Beispiele =====
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 );