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.