Beitragsseiten

Erweiterung der Formatspezifiktion

Die Formatspezifikation kann erweitert werden, um die Ausgabe stärker zu formatieren. Die Ergänzung stehen dabei direkt nach dem %-Zeichen. Falls es sinnvoll ist, können mehrere Ergänzungen kombiniert werden.

Dabei stehen folgende Ergänzungen zur Verfügung:

 Ergänzung Bedeutung
 - Links bündig Ausgabe
 + Ausgabe des Vorzeichens '+' oder '-'
 Leerzeichen Ist ein Argument kein Vorzeichen, wird ein Leerzeichen mit ausgegeben.
 0 Bei numerischer Ausgabe wird mit Nullen bis zur angegebenen Weite aufgefüllt.
 # Bei o bzw. x oder X wird mit vorangestellter 0 bzw. 0x ausgegeben. Bei e, E oder f wird der Wert mit einem Dezimalpunkt ausgegeben, auch wenn keine Nachkommastelle existiert.
 Weite
 n Es werden mindestens n Stellen ausgegeben, auch wenn der Wert weniger als n Stellen besitzt.
 * Wert des nächsten Arguments (ganzzahlig) legt die Weite fest. Bei negativem Wert wird linksbündig justiert.
 Genauigkeit
 .n Anzahl der Nachkommstellen der formatierten Ausgabe. Der genauen Schreibweise geht ein Punkt voran:


Beispiel:

#include <stdio.h>

void main(void) 
{
  int i=10;

  printf("01234567890123456789\n");
  printf("%5d\n",i);
  printf("%*d\n",i,i);
  printf("%2d\n",100);
  printf("%4d\n",100);
  printf("%.2f\n",3.143234);
  printf("%.2d\n",1000);

  char text[]="Tiefstand";

  printf("|01234567890123456789|\n");
  printf("|%s|\n",text);
  printf("|%20s|\n",text);
  printf("|%-20s|\n",text);
  printf("|%20s|\n",text+4);
  printf("|%20.4s|\n",text);
  printf("|%-20.4s|\n",text);
  printf("|%-20s|\n",text+4);
}


Bildschirmausgabe:

01234567890123456789
   10
        10
100
 100
3.14
1000
|01234567890123456789|
|Tiefstand|
|           Tiefstand|
|Tiefstand           |
|               stand|
|                Tief|
|Tief                |
|stand               |

 

Falls man eine nicht vorhandene oder zu kleine Weitenangabe vornimmt, bewirkt dies nicht, dass die Zahlen beschnitten werden bzw. mehr Zeichen enthalten.

Durch printf("%.2f\n",3.143234); wird die Gleitpunktzahl "3.143234" als "3.14" ausgegeben. Dadurch wird der Wert der Zahl nicht verändert, sondern dies bezieht sich nur auf die formatierte Ausgabe. Die Zahl weder auf- oder noch abgerundet.
So bewirkt z.B. die Ausgabe von printf("%.2d\n",1000); nicht, dass 10 ausgegeben wird. In diesem Fall wird dennoch die Zahl 1000 ausgegeben. Hingegen wird bei Strings dieser Bereich  beschnitten.