Nehmen Sie printf
, wenn Sie der zusätzliche Zeilenwechsel \n
am Ende der Ausgabe stört, zum Beispiel dann, wenn Sie nach einer Eingabe fragen.
Nehmen Sie printf
, wenn Sie spezielle Formatierungen der Ausgabe brauchen.
Statt einfach nur das printf
durch puts
zu ersetzen, muss man sein Programm überdenken. Zum einen gibt es da das zusätzliche \n
, womit nach jedem puts
eine neue Zeile begonnen wird. Zum anderen die fehlende Möglichkeit, Stringvariablen in andere Strings einzubauen.
Ändern Sie das Programm nun, wie Sie es hier sehen, kompilieren Sie es – es funktioniert nun – und starten Sie es.
#include
int main()
{
char idiot[20];
puts("Name eines Idioten:");
fgets(idiot, 20, stdin);
puts("Yep, ich denke auch, dass");
puts(idiot);
puts("ein Idiot ist.\n");
return 0;
}
Listing 3.11:Name: Insult2.c
Die Ausgabe sieht ein wenig seltsam aus, ein bisschen wie einer dieser Kettenbriefe. Aber das Programm funktioniert wie beabsichtigt:
Name eines Idioten:
Karl Klammer
Yep, ich denke auch, dass
Karl Klammer
ein Idiot ist
Dieses Kapitel hat damit begonnen, Ihnen zu zeigen, wie Sie die printf
-Funktion in Ihren Programmen einsetzen können. Dieser Abschnitt liefert einige Informationen über die Arbeitsweise dieser mächtigen Funktion sowie einen Ausblick auf einige noch kommende Dinge.
Die folgenden drei Tricks sollten Ihnen bereits geläufig sein:
printf gibt den Text aus, den Sie in Anführungszeichen als Argument übergeben.
printf benötigt den Backslash \ – eine Escape-Sequenz –, um bestimmte Zeichen darstellen zu können (eine Erklärung dieses Verhaltens finden Sie am Anfang dieses Kapitels).
printf kann den Inhalt von Variablen ausgeben, indem das Platzhalterzeichen % verwendet wird.
Das alte »Text mit printf ausgeben«
Hauptzweck von printf
ist das Ausgeben von Texten auf dem Bildschirm, mit dem folgenden einfachen Format:
printf("
text
");
Der text
wird von Anführungszeichen umgeben, diese wiederum von runden Klammern, gefolgt von einem Semikolon, weil es sich um eine Anweisung handelt.
Sonderzeichen, wie das Anführungszeichen, Tabulatoren, Backspace und Enter (eine neue Zeile) können in den dargestellten Text eingefügt werden. Diese Zeichen benötigen Escape-Sequenzen, wie sie noch beschrieben werden.
printf kann zwei oder auch mehr Zeilen darstellen, wenn man die Escape-Sequenz \n entsprechend oft in den Text einfügt.
Um ein Anführungszeichen im Text darzustellen, verwenden Sie \".
Wenn Sie Umlaute (also ä, ö, ü, Ä, Ö, Ü) sowie das Sonderzeichen ß in die printf
-Ausgaben (oder auch in andere Ausgaben, die Sie noch kennenlernen werden) einbauen wollen, sollten Sie dafür die Escape-Sequenzen aus Tabelle 3.1 einsetzen. Das mit den deutschen Sonderzeichen ist eine dumme Sache, weil der ASCII-Code eigentlich so was gar nicht kennt. Wenn Sie nun zum Beispiel in einer Entwicklungsumgebung unter Windows den Quellcode schreiben, haben diese Sonderzeichen andere Codes als in der Kommandozeile. Da die meisten von Ihnen wohl mit Konsolenanwendungen beginnen werden, sind in Tabelle 3.1 daher nur diese Escape-Sequenzen aufgelistet.
printf("Gleich gibt's \x08erger\n");
erzeugt die Bildschirmausgabe:
Gleich gibt's Ärger
Aus diesem Grund sind auch alle Programmbeispiele ohne Umlaute und das Sonderzeichen ß geschrieben – haben Sie das schon bemerkt?
Die Escape-Sequenzen von printf
Tabelle 3.1 zeigt eine Anzahl von Escape-Sequenzen. Die meisten kennen Sie schon durch die Benutzung, andere sind sehr speziell und werden in späteren Kapiteln behandelt – oder auch nicht, je nachdem, wie ich mit dem Stoff durchkomme.
Sequenz |
Bedeutung |
\b |
Backspace (der Cursor wird ein Zeichen nach links gebracht) |
\f |
Blatt auswerfen (beim Drucker), auf dem Bildschirm wird je nach Konfiguration/Betriebssystem der Bildschirm gelöscht oder einfach nur ein seltsames Zeichen ausgegeben |
\n |
Neue Zeile, wirkt wie Drücken der -Taste |
\r |
Wagenrücklauf, der Cursor wird wieder an den Zeilenanfang gesetzt |
\t |
Tabulator ansteuern |
\v |
Vertikaler Tabulator (setzt den Cursor in eine neue Zeile, je nach Konfiguration/Betriebssystem wird auch einfach nur ein seltsames Zeichen ausgegeben) |
\\ |
Das Backslash-Zeichen \ |
\' |
Der Apostroph ' |
\" |
Das Anführungszeichen " |
\? |
Das Fragezeichen ? |
\0 |
Das »Null«-Byte (das ist eine Null hier) |
\nnn |
Ein Zeichenwert als Oktalwert (zur Basis 8) |
\xnnn |
Ein Zeichenwert als Hexadezimalzahl (zur Basis 16) |
\Xnnn |
wie kleines x \xnnn |
\x084 |
kleines »ä« (nur in der Kommandozeile) |
\x094 |
kleines »ö« (nur in der Kommandozeile) |
\x081 |
kleines »ü« (nur in der Kommandozeile) |
\x08e |
großes »Ä« (nur in der Kommandozeile) |
\x099 |
großes »Ö« (nur in der Kommandozeile) |
\x09a |
großes »Ü« (nur in der Kommandozeile) |
\x0e1 |
scharfes »ß« (nur in der Kommandozeile) |
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
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.
Читать дальше