printf(format_string, ausgabeliste);
fprintf(dateizeiger, format_string, ausgabeliste);
sprintf(zeichenkette, format_string, ausgabeliste);
Aufbau von format_string:
Enthalten sein können - in buter Mischung - feste Textteile und
Format-Spezifikatoren.
Prinzipieller Aufbau von Format-Spezifikatoren
% flags feldweite . genauigkeit typvariante konversionsartSoll innerhalb der Format-Spezifikation beschrieben werden, daß das Zeichen % auszugeben ist, dann muß %% notiert werden.
printf("Operation zu %d %% fertig\n", n);
Format-Operatoren
wd ganze Zahlen
w Mindestanzahl an ausgegebenen Zeichen
wahlweise angebbar, Standard 1
gegebenenfalls wird mit Leerzeichen aufgefüllt
w kann wahlweise (in Kombination) vorangestellt werden
- Auffüllung erfolgt rechtsbündig
0 Auffüllung erfolgt mit Nullen
+ Vorzeichen (+ oder -) wird immer ausgegeben
wi ganze Zahlen, identisch mit d-Operator (ANSI-C)
wu vorzeichenlose ganze Zahlen
w Mindestanzahl an ausgegebenen Zeichen
wahlweise angebbar, Standard 1
gegebenenfalls wird mit Leerzeichen aufgefüllt
w kann wahlweise (in Kombination) vorangestellt werden
- Auffüllung erfolgt rechtsbündig
0 Auffüllung erfolgt mit Nullen
w.df reelle Zahlen, Festpunktdarstellung
w Mindestanzahl an ausgegebenen Zeichen
wahlweise angebbar
gegebenenfalls wird mit Leerzeichen aufgefüllt
w kann wahlweise (in Kombination) vorangestellt werden
- Auffüllung erfolgt rechtsbündig
0 Auffüllung erfolgt mit Nullen
+ Vorzeichen (+ oder -) wird immer ausgegeben
d Anzahl der Stellen nach dem Dezimalpunkt
Standard 6
gegebenenfalls wird gerundet
w.de reelle Zahlen, Gleitpunktdarstellung
w Mindestanzahl an ausgegebenen Zeichen
wahlweise angebbar
gegebenenfalls wird mit Leerzeichen aufgefüllt
w kann wahlweise (in Kombination) vorangestellt werden
- Auffüllung erfolgt rechtsbündig
0 Auffüllung erfolgt mit Nullen
+ Vorzeichen (+ oder -) wird immer ausgegeben
d Anzahl der Mantissen-Stellen (Genauigkeit)
wahlweise angebbar, Standard 6
gegebenenfalls wird gerundet
w.dE reelle Zahlen, Gleitpunktdarstellung
analog dem e-Operator, jedoch wird E als Exponentensymbol
anstelle von e benutzt
w.dg reelle Zahlen
in Abhähgigkeit vom darzustellenden Wert wird die
Festpunkt- oder Gleitpunktdarstellung verwendet
Die Gleitpunktdarstellung wird verwendet, wenn
- Exponent ist kleiner als -4
- Exponent ist größer oder gleich d
w.dG reelle Zahlen
analog dem g-Operator, jedoch wird E als Exponentensymbol
anstelle von e benutzt
wc Zeichen
w Mindestanzahl an ausgegebenen Zeichen
wahlweise angebbar
gegebenenfalls wird mit Leerzeichen aufgefüllt
w kann wahlweise (in Kombination) vorangestellt werden
- Auffüllung erfolgt rechtsbündig
0 Auffüllung erfolgt mit Nullen
w.ps Zeichenketten (Strings)
w Mindestanzahl an ausgegebenen Zeichen
wahlweise angebbar
gegebenenfalls wird mit Leerzeichen aufgefüllt
w kann wahlweise (in Kombination) vorangestellt werden
- Auffüllung erfolgt rechtsbündig
0 Auffüllung erfolgt mit Nullen
p Maximalzahl der auszugebenden Zeichen der Zeichenkette
(Teilzeichenkette: die ersten p Zeichen)
Generell gilt: Wird w zu klein gewählt, so wird die Angabe
ignoriert und es werden so viele Stellen ausgegeben, wie erforderlich sind. Festlegung der Typ-Variante
Die folgenden Operatoren können den Format-Operatoren vorangestellt werden:
zulässig für
h short d i o u x X ANSI-C
l long d i o u x X
c ANSI-C, Amendment 1
L long double e E f g G ANSI-C
Es ist in einer Reihe von Situationen äußerst wichtig, daß
der Datentyp des auszugegeben Ausdrucks und die Typangabe in der
Format-Spezifikation übereinstimmen ! Siehe auch: Fehlerquellen bei printf
Beispiele:
int i;
printf("|%5d|%-5d|%+5d|%+-5d|% 5d|%05d|%5.0d|%5.2d|%d|\n",
i, i, i, i, i, i, i, i, i);
liefert für i = 0, 1, -1, 100000:
| 0|0 | +0|+0 | 0|00000| | 00|0|
| 1|1 | +1|+1 | 1|00001| 1| 01|1|
| -1|-1 | -1|-1 | -1|-0001| -1| -01|-1|
|100000|100000|+100000|+100000| 100000|100000|100000|100000|100000|
falls int = long
|-31072|-31072|-31072|-31072|-31072|-31072|-31072|-31072|-31072|
falls int = short
Beispiele:
unsigned u;
printf("|%5u|%-5u|%+5u|%+-5u|%5x|%5X|%05X|%5o|%u|\n",
u, u, u, u, u, u, u, u, u);
liefert für i = 0, 1, 100000:
| 0|0 | 0|0 | 0| 0|00000| 0|0|
| 1|1 | 1|1 | 1| 1|00001| 1|1|
|100000|100000|100000|100000|186a0|186A0|186A0|303240|100000|
falls int = long
Dynamische Formatdeskriptoren
Sowohl für die Feldweite als auch für die Genauigkeit kann anstelle
einer Zahl ein * angegeben werden.
Jedem * im Format-String muß ein zusätzlicher Parameter
in der Ausgabeliste entsprechen.
Beispiel:
int i = 1;
printf("%0*d\n", 2, i); /* liefert 01 */
printf("%0*d\n", 3, i); /* liefert 001 */
printf("%0*d\n", 8, i); /* liefert 00000001 */
double d = 1.0/3.0;
printf("%lf\n", d); /* liefert 0.333333 */
printf("%*.*lf\n", 6, 2, d); /* liefert 0.33 */
printf("%*.*lf\n", 12, 10, d); /* liefert 0.3333333333 */
Das Beispiel demonstriert die Wirkungsweise, ist aber ansonsten wenig sinnvoll,
da Feldweite und Genauigkeit ähnlich wie bei "normalen" Formatdeskriptoren
fest angegeben worden sind. Beispiel:
x = fct(...);
if ( x > y ) {
f = 15; w = 8; }
else {
f = 10; w = 3;
}
printf("x = %*.*lf", f, w, x);