Tabelle 3.1: Escape-Sequenzen von printf
Sie sollten diese Seite mit einem dieser berühmten gelben Zettel versehen oder ein Eselsohr reinknicken, denn da sich kaum jemand an so Zeugs erinnert, werden Sie in dieser Tabelle oft nachsehen müssen.
Das Deluxe-Testprogramm für Escape-Sequenzen
Damit Sie sehen können, wie einige der Sequenzen arbeiten, erzeugen Sie das neue Programm Printfun.c
. Sie werden immer wieder nur die Zeile mit dem printf
verändern, um die unterschiedlichen Effekte sehen zu können.
/*
printf Escape-Sequenz Demoprogramm
*/
#include <stdio.h>
int main()
{
printf("Hier ist die \\a-Sequenz: \a");
getchar();
return 0;
}
Listing 3.12: Name: Printfun.c
Geben Sie das Programm in Ihrem Texteditor ein und speichern Sie es als Printfun.c
. Kompilieren und starten Sie es. Der Zweck dieses Programms besteht darin, dass Sie »sehen«, wie die Escape-Sequenz \a
wirkt. Hier eine Beispielausgabe:
Hier ist die \a-Sequenz:>>grausames BIEP!-Geräusch<<
Der Lautsprecher piept – lahm, oder? Bach oder Beethoven ist das nicht. Drücken Sie die
-Taste, um das Programm zu beenden. Wenn das Programm läuft, wartet getchar
auf einen Tastendruck von Ihnen. Das erlaubt es Ihnen, dass Sie sich in aller Ruhe die Ausgaben ansehen können, bevor das Programm endet. getchar
folgt ein leeres Pärchen runde Klammern ()
.
Weitere Tests mit Printfun
Der wahre Test mit Printfun
beginnt erst, wir werden die Escape-Sequenz \\a
beziehungsweise \a
durch andere Sequenzen ersetzen. Fangen wir damit an, dass wir die Zeile mit dem printf
wie folgt ändern:
printf("Hier kommt das \\b Backspace:\b\b\b\b");
Also, speichern, kompilieren, starten.
Der Cursor sitzt nun auf dem a
von Backspace, wenn das Programm läuft. Das liegt daran, dass der Cursor nach links gesetzt wird, aber nichts löscht. Wir haben hier vier \b
, daher wird der Cursor auch vier Positionen nach links gesetzt (falls der Cursor nicht genau dort steht, haben Sie ein Leerzeichen zu viel oder nicht vier Backspaces eingegeben).
Mit dem \n
sind Sie ja vertraut, aber was macht \r
? Wie unterscheidet sich ein Wagenrücklauf von einem Zeilenvorschub? Ändern Sie die betreffende Zeile wieder und schauen Sie sich die Eingabe an:
printf("Hier kommt der \\r Wagenruecklauf: \r");
In der Ausgabe sehen Sie, dass der Cursor unter dem H in der Zeile blinkt. Der Wagenrücklauf versinnbildlicht den Wagenrücklauf einer Schreibmaschine: Man bewegt sich zurück zum Anfang der Zeile. Nur durch den Zeilenvorschub kommt man in die nächste Zeile. (Erinnern Sie sich noch an Schreibmaschinen?)
Das \t
-Zeichen steht für einen Tabulator, gleichbedeutend mit dem Drücken der
printf("Apfel\t\Birne\tEi\n");
Dann fügen Sie direkt danach noch die folgenden Zeilen ein:
printf("1\t2\t3\n");
printf("alpha\tbeta\tgamma\n");
In den printf
-Strings sind jetzt keinerlei Leerzeichen, die Wörter werden alle nur durch Tabs \t
getrennt. Achten Sie darauf, dass in jeder Zeile zwei Tabs und ein Newline \n
vorkommen. Noch ein Hinweis: Gerne schreibt man auch überflüssige Backspaces in die Zeilen, weil man sich leicht mit der Reihenfolge vertut. Wenn Sie fertig sind, starten Sie das Programm, hier die Beispielausgabe:
Apfel Birne Ei
1 2 3
alpha beta gamma
Obwohl die printf
-Anweisungen mit den Tabs \t
ein bisschen wirr aussehen, so ist die Ausgabe doch schön geordnet. Eine Tabelle – hey, nicht schlecht für einen Frischling. Weiter so.
Standardmäßig sind die Tabstopps alle acht Zeichen eingestellt, daher fügt ein \t so viele Leerzeichen in die Ausgabe ein, dass das nächste Zeichen auf dem nächsten Tabstopp liegt. Ich erwähne das, weil viele glauben, dass ein Tab einfach acht Leerzeichen in den String einfügt – das stimmt aber nicht.
Die Zeichen \f und \v erzeugen in der Kommandozeile von Windows nur Sonderzeichen, aber ein Seitenvorschub beziehungsweise Bildschirmlöschen oder ein vertikaler Tabulator werden nicht ausgeführt.
Leider besitzt C keinerlei Funktionen für Kommandos wie »Bildschirm löschen« oder »Schreibe mit einer anderen Farbe«. Je nach Betriebssystem muss man hier auf andere Funktionen zurückgreifen, dazu müssen Sie das Handbuch Ihres Compilers zurate ziehen.
Um die anderen Escape-Sequenzen kümmern wir uns im Moment nicht, Sie lernen später noch, wie diese funktionieren.
Wieder mal die Komplexität des printf-Formats
printf
kann man auch benutzen, um den Inhalt von Variablen darzustellen, was Sie bereits mit Stringvariablen und dem Platzhalter %s
gesehen haben (die lustige Welt der Variablen lernen Sie im nächsten Kapitel kennen). Dazu verwendet printf
folgendes Format: