Programmiersprache C/C++

Formatierte Ausgabe

Eine formatierte Ausgabe ist möglich unter Nutzung der Funktionen Die Ausgabeliste kann im allgemeinen beliebig lang und im Spezialfall auch leer sein.

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 konversionsart
Soll innerhalb der Format-Spezifikation beschrieben werden, daß das Zeichen % auszugeben ist, dann muß %% notiert werden.
Beispiel:
  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 !
Fehlende bzw. unkorrekte Angaben können dazu führen, daß kommentarlos ein falscher Wert im Ausgabestrom erscheint !

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.
Sinnvoll ist die Anwendung nur dann, wenn Feldweite bzw. Genauigkeit berechnet werden.

Beispiel:

  x = fct(...);
  if ( x > y ) {
    f = 15; w = 8; }
  else {
    f = 10; w = 3;
  }
  printf("x = %*.*lf", f, w, x);

Zurück zum Menü
Zurück zur vorigen Seite Weiter zur nächsten Seite

P. Böhme, 21.03.1996