Formatierte Ausgabe mit printf()
Um eine Ausgabe auf dem Bildschirm herzustellen, kann man die printf()-Funktion benutzen. Diese erzeugt eine formatierte Ausgabe auf dem Bildschirm. Der printf() steht in der Standardbibliothek stdio.h .
Die Syntax von printf() sieht folgendermaßen aus:
int printf(const char *format,...);
Die printf()-Funktion gibt nicht nur etwas auf dem Bildschirm aus, sondern gibt uns auch eine Information darüber, wie viele Zeichen (ohne das Terminierungszeichen '\0') sie ausgegeben hat. Der Rückgabewert von printf() ist also eine Integer-Zahl oder im Fehlerfall EOF.
Folgendes Beispiel zeigt dies:
#include <stdio.h>
void main(void)
{
int anzahl;
anzahl = printf("Hallo Welt");
printf(" enthaelt %d Zeichen\n",anzahl);
}
Bildschirmausgabe:
Hallo Welt enthaelt 10 Zeichen |
Wie man aus dem obigen Beispiel erkennen kann, erzeugt printf() keinen automatischen Zeilenumbruch. Wenn man eine Zeile beenden möchte, fügt man an der entsprechenden Stelle ein \n ein.
Inhalte der möglichen Ausgaben
Mit der printf()-Funktion kann man nun folgende Inhalte formatiert auf dem Bildschim ausgeben:
-
Nur Text: printf(“Ich bin nur ein Text“);
-
Inhalt einer Variablen: printf(“%d“,anzahl);
-
Beides: printf(“Erst Text %d noch mehr Text“, anzahl);
Bei der Textausgabe ist darauf zu achten, dass der Text eine Länge von 32767 (Ansi C89 Standard) bzw. 65535 (Ansi C99 Standard) Zeichen nicht überschreitet. Sonst kommt es zu einem Pufferüberlauf.
Um den Inhalt einer Variablen auszugeben benötigt printf(“%d“, var) eine Formatspezifikation (siehe auch Variablen / Konstanten / Datentypen) , die mit einem %-Zeichen beginnt und mit einem Buchstaben endet. Der verwendete Buchstabe ist abhängig von dem Datentyp der Variablen, die man ausgeben möchte (siehe Variablen). Die Formatspezifikation steht im Anführungszeichenbereich von printf() und fungiert hier als Platzhalter für den tatsächlichen Variablen-Inhalt. Die Variable wird durch ein Komma getrennt dahinter angegeben. Sollen mehrere Variablen ausgeben werden, ist die Reihenfolge der Platzhalter identisch mit der Reihenfolge der Variablen.
Beispiel:
#include<stdio.h>
void main()
{
int var1 = 10, var2 = 20, var3
var3 = var1 + var2;
printf(“ %d + %d = %d“, var1, var2, var3);
}
Bildschirmausgabe:
10 + 20 = 30 |
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.