Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

printf - Formatierte Ausgabe auf Standardausgabe

&pagelevel(4)&pagelevel

Definition

#include <stdio.h>

int printf(const char *format, argumentenliste);

printf bereitet Daten (Zeichen, Zeichenketten, numerische Werte) gemäß den Angaben in der Zeichenkette format für die Ausgabe auf und schreibt sie auf die Standardausgabe stdout. Numerische Werte werden dabei von ihrer internen Darstellung in abdruckbare Zeichen umgewandelt.

Parameter

Die Formatzeichenkette kann folgende Angaben enthalten:

  • Einfache Zeichen (char)

    Diese werden 1 : 1 ausgegeben.

  • Steuerzeichen für Zwischenraum, beginnend mit einem Gegenschrägstrich (\)

  • Formatanweisungen, beginnend mit dem Prozentzeichen (%)

    Gemäß den Angaben in den Formatanweisungen werden die in einer Argumentenliste übergebenen Daten formatiert und umgewandelt. Zu jedem Argument muss es eine Formatanweisung geben, wobei die erste Formatanweisung mit dem ersten Argument korrespondiert usw.

Einfache Zeichen

Alle Zeichen, die nicht Element einer Formatanweisung sind und kein spezielles Steuerzeichen darstellen (mit Gegenschrägstrich beginnend), werden unverändert ausgegeben. Soll das Prozent-Zeichen (%) geschrieben werden, muss es doppelt angegeben werden (%%).

Steuerzeichen für Zwischenraum

\n

Zeilenvorschub

\t

Tabulator

\f

Seitenwechsel

\v

vertikaler Tabulator

\b

Zeichen rücksetzen

\r

Wagenrücklauf

Nähere Informationen zur Umsetzung dieser Steuerzeichen finden Sie in Abschnitt "Zwischenraum“ (Grundbegriffe).

argumentenliste

Variablen oder Konstanten, deren Werte gemäß den Angaben in den Formatanweisungen für die Ausgabe umgewandelt und formatiert werden sollen. Wenn die Anzahl der Formatanweisungen nicht mit der Anzahl der Argumente übereinstimmt, gilt Folgendes: Gibt es mehr Argumente, werden die überzähligen ignoriert. Gibt es weniger Argumente, führt dies zu undefinierten Ergebnissen.

Im Folgenden wird die Formatanweisung getrennt nach KR-Funktionalität und ANSI-Funktionalität beschrieben.

Formatanweisung (KR-Funktionalität, nur bei C/C++ Versionen kleiner V3.0 )

Formatanweisungen können folgendermaßen aufgebaut sein:

%

[-][+][0][n|*][.m|.*]

{ [l] {d|o|u|x} |
  {D|O|U|X} |
  {f|e|g} |
  {c|s|%} }

1.

   2.

   3.

  1. Jede Formatanweisung muss mit einem Prozentzeichen (%) beginnen.

  2. Allgemeine Formatierungszeichen, z.B. zur Steuerung der Vorzeichenausgabe, links- oder rechtsbündigen Ausrichtung, Breite des Ausgabefeldes etc.

  3. Zeichen, die die eigentliche Umwandlung festlegen.

Bedeutung der Formatierungszeichen:

-

Linksbündige Ausrichtung des Ausgabefeldes.
Standard: Rechtsbündige Ausrichtung.

+

Das Ergebnis einer Umwandlung mit Vorzeichen wird immer mit Vorzeichen ausgegeben.
Standard: Nur ein ggf. negatives Vorzeichen wird ausgegeben.

0

Mit Nullen auffüllen.
Bei allen Umwandlungen wird das Ausgabefeld mit Nullen aufgefüllt.
Standard: Das Ausgabefeld wird mit Leerzeichen aufgefüllt.
Die Auffüllung mit Nullen wird auch bei linksbündiger Ausrichtung (Formatierungszeichen -) durchgeführt.

n   

Minimale Gesamtfeldbreite (inklusive Dezimalpunkt). Falls für die Umwandlung einer Zahl mehr Stellen benötigt werden, hat diese Angabe keine Bedeutung. Ist die
Ausgabe kürzer als die angegebene Feldbreite, wird sie bis zur Feldbreite mit Leerzeichen bzw. Nullen aufgefüllt (vgl. Formatierungszeichen - und 0).

*

Die Gesamtfeldbreite (siehe n) wird statt in der Formatanweisung mit einem Argument festgelegt. Der aktuelle Wert (ganzzahlig) muss unmittelbar vor dem umzuwandelnden Argument oder unmittelbar vor dem Wert der Genauigkeitsangabe (Formatierungszeichen .m) in der Argumentenliste stehen (durch ein Komma getrennt).

.m

Genauigkeitsangabe.
e-, f-, g-Umwandlung: Genaue Anzahl der Stellen nach dem Dezimalpunkt (maximal 20). Standard: 6 Stellen.
s-Umwandlung: Maximale Anzahl der auszugebenden Zeichen. Standard: Alle Zeichen bis zum abschließenden Nullbyte (\0).
Bei allen anderen Umwandlungen wird die Genauigkeitsangabe ignoriert.

.*

Die Genauigkeitsangabe (siehe .m) wird statt in der Formatanweisung mit einem Argument festgelegt. Der aktuelle Wert (ganzzahlig) muss unmittelbar vor dem umzuwandelnden Argument in der Argumentenliste stehen (durch ein Komma getrennt).

Bedeutung der Umwandlungszeichen:

l   

l vor d, o, u, x:
Umwandlung eines Arguments vom Typ long int.
Die Angabe ist identisch mit den Großbuchstaben D, O, U, X.

d, o, u, x


Darstellung einer ganzen Zahl (int) als
Dezimalzahl mit Vorzeichen (d),
Oktalzahl ohne Vorzeichen (o),
Dezimalzahl ohne Vorzeichen (u),
Sedezimalzahl ohne Vorzeichen (x).

f

Darstellung einer Gleitkommazahl (float oder double) im Format [-]ddd.ddd

Das Dezimalpunktzeichen wird durch die Lokalität (Kategorie LC_NUMERIC) beeinflusst. Voreingestellt ist der Punkt.
Die Anzahl der Stellen nach dem Dezimalpunkt hängt von der Genauigkeitsangabe in .m ab;
Standard (keine Angabe): 6 Stellen.
Bei Genauigkeit 0 erfolgt die Ausgabe ohne Dezimalpunkt.

e

Darstellung einer Gleitkommazahl (float oder double) im Format [-]d.ddde{+|-}dd.

Das Dezimalpunktzeichen wird durch die Lokalität (Kategorie LC_NUMERIC) beeinflusst. Voreingestellt ist der Punkt.
Die Anzahl der Stellen nach dem Dezimalpunkt hängt von der Genauigkeitsangabe .m ab;
Standard (keine Angabe): 6 Stellen.
Bei Genauigkeit 0 wird ein Dezimalpunkt ohne nachfolgende Ziffern ausgegeben.

g

Darstellung einer Gleitkommazahl (float oder double) im f- oder e-Format.
Die Anzahl der Stellen nach dem Dezimalpunkt hängt von der Genauigkeitsangabe .m ab.
Es wird jeweils die Darstellung gewählt, die unter Wahrung der Genauigkeit am wenigsten Platz beansprucht.

c

Format für die Ausgabe eines einzelnen Zeichens (char). Das Zeichen ’\0’ wird ignoriert.

s

Format für die Ausgabe von Zeichenketten.
Die Zeichenkette sollte mit ’\0’ abgeschlossen sein. printf schreibt so viele Zeichen der Zeichenkette wie mit der Genauigkeit .m angegeben ist.
Standard (keine Angabe): printf schreibt alle Zeichen bis ’\0’.

%

Ausgabe des Zeichens %, keine Umwandlung.

 

Formatanweisung (ANSI-Funktionalität)

Formatanweisungen können folgendermaßen aufgebaut sein:

%

[-][+]['BLANK'][#][0][n|*][.m|.*]

{[{hh|h|l|ll|j|z|t}]
  {d|i|o|u|x|X}          |
 [{hh|h|l|ll|j|z|t}]   n |
 [L] {a|A|e|E|f|F|g|G}   |
 [l] {c|s}               |
 {D|O|U|p}               |
 % }

1.

  2.

     3.

  1. Jede Formatanweisung muss mit einem Prozentzeichen (%) beginnen.

  2. Allgemeine Formatierungszeichen, z.B. zur Steuerung der Vorzeichenausgabe, links- oder rechtsbündigen Ausrichtung, Breite des Ausgabefeldes etc.

  3. Zeichen, die die eigentliche Umwandlung festlegen.

Bedeutung der Formatierungszeichen:

-

Linksbündige Ausrichtung des Ausgabefeldes.
Standard: Rechtsbündige Ausrichtung.

+

Das Ergebnis einer Umwandlung mit Vorzeichen wird immer mit Vorzeichen ausgegeben.
Standard: Nur ein ggf. negatives Vorzeichen wird ausgegeben.

'BLANK' (Leerzeichen) 


Wenn das erste Zeichen einer mit Vorzeichen umzuwandelnden Zeichenfolge kein Vorzeichen ist, wird dem Ergebnis ein Leerzeichen vorangestellt.

Das Formatierungszeichen 'BLANK' wird ignoriert, wenn gleichzeitig + angegeben wird.

#

Umwandlung des Ergebnisses in ein alternatives Format.
o-Umwandlung: Die Genauigkeit wird so erhöht, dass die erste Ziffer des Ergebnisses die Ziffer 0 ist.
x- bzw. X-Umwandlung: Einem Ergebnis ungleich 0 wird die Sequenz 0x bzw. 0X vorangestellt.
a-, A-, e-, E-, f-, F, g- bzw. G-Umwandlung: Das Ergebnis enthält immer einen Dezimalpunkt, auch wenn danach keine weiteren Ziffern folgen (normalerweise enthält das Ergebnis nur einen Dezimalpunkt, wenn danach mindestens eine Ziffer folgt). Außerdem werden bei g- bzw. G-Umwandlung abschließende Nullen nicht weggelassen.
Das Formatierungszeichen # hat keine Wirkung bei c-, s-, d-, i-, u-Umwandlung.

0

Mit Nullen auffüllen.
Bei der Umwandlung von ganzen Zahlen (d, i, o, u, x, X) und Gleitkommazahlen (a, A, e, E, f, F, g, G) wird das Ausgabefeld mit Nullen aufgefüllt.
Standard: Das Ausgabefeld wird mit Leerzeichen aufgefüllt.
0 wird ignoriert, wenn das Formatierungszeichen - oder bei der Umwandlung von ganzen Zahlen eine Genauigkeit .m angegeben wird.
Bei c-, p- und s-Umwandlung hat das Formatierungszeichen 0 keine Wirkung.

n   

Minimale Gesamtfeldbreite (inklusive Dezimalpunkt). Falls für die Umwandlung einer Zahl mehr Stellen benötigt werden, hat diese Angabe keine Bedeutung. Ist die
Ausgabe kürzer als die angegebene Feldbreite, wird sie bis zur Feldbreite mit Leerzeichen bzw. Nullen aufgefüllt (vgl. Formatierungszeichen - und 0).

*   

Die Gesamtfeldbreite (siehe n) wird statt in der Formatanweisung mit einem Argument festgelegt. Der aktuelle Wert (ganzzahlig) muss unmittelbar vor dem umzuwandelnden Argument oder unmittelbar vor dem Wert der Genauigkeitsangabe (Formatierungszeichen .m) in der Argumentenliste stehen (durch ein Komma getrennt).

.m

Genauigkeitsangabe.
d-, i-, o-, u-, x- bzw. X-Umwandlung: Minimale Anzahl der auszugebenden Ziffern. Standard: 1.
e-, E-, f, F-Umwandlung: Genaue Anzahl der Stellen nach dem Dezimalpunkt (maximal 20). Standard: 6 Stellen.
a-, A-Umwandlung: Genaue Anzahl der Stellen nach dem Dezimalpunkt. Standard: 13 Stellen für long, 27 Stellen für long double.
g- bzw. G-Umwandlung: Maximale Anzahl der signifikanten Stellen.
s-Umwandlung: Maximale Anzahl der auszugebenden Zeichen. Standard: Alle Zeichen bis zum abschließenden Nullbyte (\0).

.*

Die Genauigkeitsangabe (siehe .m) wird statt in der Formatanweisung mit einem Argument festgelegt. Der aktuelle Wert (ganzzahlig) muss unmittelbar vor dem umzuwandelnden Argument in der Argumentenliste stehen (durch ein Komma getrennt).

Bedeutung der Umwandlungszeichen:

hh

hh vor d, i, o, u, x, X:
Umwandlung eines Arguments vom Typ signed char bzw. unsigned char.

hh vor n:
Das Argument ist vom Typ Zeiger auf signed char (keine Umwandlung).

h

h vor d, i, o, u, x, X:
Umwandlung eines Arguments vom Typ short int bzw. unsigned short int.

h vor n:
Das Argument ist vom Typ Zeiger auf short int (keine Umwandlung).

l

l vor d, i, o, u, x, X:
Umwandlung eines Arguments vom Typ long int bzw. unsigned long int.
l vor d, o, u ist gleichbedeutend mit den Großbuchstaben D, O, U.

l vor c:
Das Argument ist vom Typ wint_t.

l vor s:
Das Argument ist vom Typ Zeiger auf wchar_t.

l vor n:
Das Argument ist vom Typ Zeiger auf long int (keine Umwandlung).

ll

ll vor d, i, o, u, x, X :
Umwandlung eines Arguments vom Typ long long int bzw. unsigned long long int.

ll vor n:
Das Argument ist vom Typ Zeiger auf long long int.

j

j vor d, i, o, u, x, X:
Umwandlung eines Arguments vom Typ intmax_t oder uintmax_t.

j vor n:
Das Argument ist vom Typ Zeiger auf intmax_t (keine Umwandlung).

z

z vor d, i, o, u, x, X:
Umwandlung eines Arguments vom Typ size_t bzw. long int.

z vor n:
Das Argument ist vom Typ Zeiger auf long int (keine Umwandlung).

t

t vor d, i, o, u, x, X:
Umwandlung eines Arguments vom Typ ptrdiff_t bzw unsigned long int.

t vor n:
Das Argument ist vom Typ Zeiger auf ptrdiff_t (keine Umwandlung).

L       

L vor e, E, f, g, G:
Umwandlung eines Arguments vom Typ long double.

d, i, o, u, x, X  


Darstellung einer ganzen Zahl (int) als
Dezimalzahl mit Vorzeichen (d, i),
Oktalzahl ohne Vorzeichen (o),
Dezimalzahl ohne Vorzeichen (u),
Sedezimalzahl ohne Vorzeichen (x, X).
Bei x werden die Kleinbuchstaben abcdef benutzt, bei X die Großbuchstaben ABCDEF.
Die Genauigkeitsangabe .m gibt die minimale Anzahl der auszugebenden Ziffern an. Ist der Wert mit weniger Ziffern darstellbar, wird das Ergebnis mit führenden Nullen aufgefüllt. Standard ist Genauigkeit 1. Bei Genauigkeit 0 und Wert 0 erfolgt keine Ausgabe.

f, F   

Darstellung einer Gleitkommazahl (float oder double) im Format [-]ddd.ddd
Das Dezimalpunktzeichen wird durch die Lokalität (Kategorie LC_NUMERIC) beeinflusst. Voreingestellt ist der Punkt.
Die Anzahl der Stellen nach dem Dezimalpunkt hängt von der Genauigkeitsangabe in .m ab;
Standard (keine Angabe): 6 Stellen.
Bei Genauigkeit 0 erfolgt die Ausgabe ohne Dezimalpunkt.

e, E

Darstellung einer Gleitkommazahl (float oder double) im Format [-]d.ddde{+|-}dd.
Das Dezimalpunktzeichen wird durch die Lokalität (Kategorie LC_NUMERIC) beeinflusst. Voreingestellt ist der Punkt.
Der Exponent wird zur Basis 10 ausgegeben.
Bei E-Umwandlung wird dem Exponenten der Großbuchstabe E vorangestellt.
Die Anzahl der Stellen nach dem Dezimalpunkt hängt von der Genauigkeitsangabe .m ab;
Standard (keine Angabe): 6 Stellen.
Bei Genauigkeit 0 erfolgt die Ausgabe ohne Dezimalpunkt.

g, G

Darstellung einer Gleitkommazahl (float oder double) im f- oder e-Format (bzw. bei G-Umwandlung im E-Format).
Die Anzahl der signifikanten Stellen hängt von der Genauigkeitsangabe .m ab.
Das e- bzw. E-Format wird nur dann verwendet, wenn der Exponent des Umwandlungsergebnisses kleiner -4 oder größer als die angegebene Genauigkeit ist.

a, A

Darstellung einer Gleitpunktzahl (float oder double) im Format [-] 0xh.hhhh p{+|-} d.
Jedes h entspricht einer Hexadezimalziffer.
Das Dezimalpunktzeichen wird durch die Lokalität (Kategorie LC_NUMERIC) beeinflusst. Voreingestellt ist der Punkt.
Der Exponent wird zur Basis 2 ausgegeben.
Bei a-Umwandlung werden die Kleinbuchstaben a, b, c, d, e und f sowie x und p verwendet, bei A-Umwandlung die Großbuchstaben A, B, C, DE und F sowie X und P.
Die Anzahl der Stellen nach dem Dezimalpunktzeichen hängt von der Genauigkeitsangabe .m ab;
Standard (keine Angabe): 27 Stellen bei Umwandlungszeichen L, 13 Stellen sonst.
Bei Genauigkeit 0 erfolgt die Ausgabe ohne Dezimalzeichen.

c

Ohne Umwandlungszeichen l: Das Argument vom Typ int wird umgewandelt in den Typ unsigned char, und das entsprechende Zeichen wird geschrieben.
Mit Umwandlungszeichen l: Das Argument vom Typ wint_t wird umgewandelt wie bei ls ohne Angabe einer Genauigkeit, wobei das Argument ein Zeiger auf ein 2-elementiges Feld ist, dessen erstes Element das wint_t-Argument enthält und das zweite das Null-Langzeichen.

p

Umwandlung eines Arguments vom Typ Zeiger auf void.
Die Ausgabe erfolgt als 8stellige Sedezimalzahl (analog zu der Angabe %08.8x).

s

Ohne Umwandlungszeichen l: Das Argument ist ein Zeiger auf eine Zeichenkette vom Typ char. Die Zeichenkette sollte mit ’\0’ abgeschlossen sein. printf schreibt so viele Zeichen der Zeichenkette wie mit der Genauigkeit .m angegeben ist.
Standard (keine Angabe): printf schreibt alle Zeichen bis ’\0’.
Mit Umwandlungszeichen l:Das Argument ist vom Typ Zeiger auf eine Langzeichenkette (wchar_t). Alle Langzeichen bis zum abschließenden Null-Langzeichen inklusive werden in Multibyte-Zeichen konvertiert (wie durch wcrtomb; das zugehörige mbstate_t-Objekt wird vor Konvertierung des ersten Langzeichens mit Null initialisiert). Die entsprechenden Multibyte-Zeichen werden bis zum Null-Langzeichen (exklusive) geschrieben. printf schreibt so viele Zeichen der Zeichenkette (inklusive Umschaltsequenzen), wie mit der Genauigkeit .m angegeben ist.
Standard (keine Angabe): printf schreibt alle Zeichen bis ’\0’.
Ein unvollständiges Multibyte-Zeichen wird in keinem Fall geschrieben.

n

Es findet keine Umwandlung und Ausgabe des Arguments statt. Das Argument ist vom Typ Zeiger auf int. Dieser ganzzahligen Variablen wird die Anzahl der Zeichen zugewiesen, die printf bis zu diesem Zeitpunkt für die Ausgabe erzeugt hat.

%

Ausgabe des Zeichens %, keine Umwandlung.

Returnwert

Anzahl der ausgegebenen Zeichen



bei Erfolg.                                                                                              


Integer< 0

bei Fehler.

Hinweise

Bei der Umwandlung von Gleitkommazahlen rundet printf auf die angegebene Genauigkeit.

printf nimmt keine Konvertierung von einem Datentyp in einen anderen vor. Soll ein Wert nicht entsprechend seinem Typ ausgegeben werden, muss er explizit konvertiert werden (z.B. mit dem cast-Operator).

Die Daten werden nicht sofort in die externe Datei geschrieben, sondern in einem C-internen Puffer zwischengespeichert (siehe Abschnitt "Pufferung“ (Grundbegriffe)).

Maximale Anzahl der auszugebenden Zeichen:
Bei KR-Funktionalität (nur bei C/C++ Versionen kleiner V3.0 vorhanden) können pro printf-Aufruf maximal 1400 Zeichen ausgegeben werden,
bei ANSI-Funktionalität maximal 1400 Zeichen pro Konversionselement (z.B. %s).

Versuche, nicht initialisierte Variablen oder Variablen nicht entsprechend ihrem Datentyp auszugeben, können zu undefinierten Ergebnissen führen.

Das Verhalten ist undefiniert, wenn in einer Formatanweisung dem Prozentzeichen (%) ein nicht definiertes Formatierungs- bzw. Umwandlungszeichen folgt.

printf arbeitet wie fprintf, nur dass die Daten auf die Standardausgabe und nicht in eine Datei geschrieben werden.

Bei Textdateien mit der Zugriffsart SAM und variabler Satzlänge, für die zusätzlich eine maximale Satzlänge angegeben ist, gilt: Wenn bei fopen die Angabe split=no gemacht wurde, werden Sätze, die länger als die maximale Satzlänge sind, beim Schreiben auf die maximale Satzlänge gekürzt. Standardmäßig oder mit der Angabe split=yes werden diese Sätze in mehrere Sätze aufgeteilt. Hat ein Satz genau die maximale Satzlänge, wird nach diesem ein Satz der Länge Null geschrieben.

Beispiel 1

Ausgabe des Datums und der Uhrzeit in der Form

Donnerstag, den 14. Februar, 12:05 Uhr

Die Argumente wochentag und monat sind Zeiger auf Zeichenketten, die mit ’\0’ abgeschlossen sind.

printf("%s, den %d. %s, %02d:%02d Uhr\n", wochentag, tag, monat, std, min); 

Beispiel 2

Ausgabe der Zahl pi auf 5 Nachkommastellen.

printf("pi = %.5f\n", 4 * atan(1.0)); 

Beispiel 3

Die gängigsten printf-Formate erklären sich durch ihre Anwendung in den übrigen Beispielprogrammen von selbst. In folgender Tabelle finden Sie einige weitere Formatangaben einschließlich ihrer Wirkung aufgelistet.
Zur Verdeutlichung ist das umgewandelte Ergebnis in > < eingerahmt.

Formatangabe

Argument(e)

Ergebnis

%.6s

"Konstanz"

>Konsta<

%10.5s

"Konstanz"

> Konst<

%-10.5s

"Konstanz"

>Konst <

%15.15s

"Konstanz"

> Konstanz<

%*.*s

20,7,"Konstanz"

> Konstan<

%-*.*s

15,10,"Konstanz"

>Konstanz <

%8d

721932

> 721932<

%-8d

721932

>721932 <

%-*.*f

3,2,27.31928

>27.32<

%-0*.*f

1,12,19.84

>19.840000000000<

%04.*f

12,10.60

>10.600000000000<

%-0*.*g

1,12,19.84

>19.84<

%e

1712.1961

>1.712196e+03<

%.10e

1712.1961

>1.7121961000e+03<

%10.10e

1712.1961

>1.7121961000e+03<

Siehe auch

fprintf, sprintf, snprintf, putc, putchar, puts, scanf, fscanf