printf
tatsächlich auf einen Drucker. Aber anstatt den Namen zu ändern, hat man nur den Ort, an dem die Informationen auftauchen, geändert.
Die Funktion printf (etwas auf dem Bildschirm ausgeben)
Die Funktion printf
kann ziemlich abgedreht sein, aber in der einfachen Betriebsart verwendet sie folgendes Format:
printf("text");
printf
wird immer kleingeschrieben, das ist nicht verhandelbar. Darauf folgen runde Klammern, die einen Text in Anführungszeichen enthalten. Der schließenden Klammer folgt immer ein Semikolon.
Der kursiv geschriebene text in dem kleinen Codeabschnitt bedeutet, dass man ihn durch einen beliebigen String ersetzen kann. printf
wird diesen Text dann darstellen. Obwohl der Text in Anführungszeichen steht, werden diese nicht am Bildschirm ausgegeben.
Es gibt weitere Regeln zu printf
, die noch nachgereicht werden.
Ein anderes »printf macht was Lustiges«-Programm
Die Aufgabe von printf
besteht darin, Ausgaben auf dem Bildschirm erscheinen zu lassen. Das haben Sie in Kapitel 2 schon mehrfach gemacht. Was halten Sie davon, dies im folgenden Programm Ende.c
noch mal zu tun?
#include <stdio.h>
int main()
{
printf("Was soll ich beenden?\n");
return 0;
}
Listing 3.1: Name: Ende.c
Starten Sie Ihren Editor, geben Sie das Programm ein, kompilieren und starten Sie es. Das ist ein Programmierergag, wie er im Buche steht.
Geben Sie nun in der Eingabeaufforderung die Anweisung zum Starten des Programms Ende.exe
ein, indem Sie Ende
eingeben. So sieht die Antwort aus:
Was soll ich beenden?
Haha. Das ist, wenn Sie das in der Kommandozeile machen. Die anderen werden zu Ihnen sagen: »Hey Alter, du bist ziemlich abgedreht, seit du programmierst.« Und Sie werden antworten: »Ich programmiere nicht, ich code.«
Offensichtlich macht dieses Programm keinen Sinn, wenn man es unter Windows startet … denken Sie daher daran, dass Sie die Beispiele hier im Buch von einer Kommandozeile aus (»DOS-Fenster«) oder unter Code:Blocks starten, dann können Sie auch alles lesen.
Noch mehr lustige Texte
Meine Damen und Herren, ich präsentiere Ihnen den folgenden String:
"Ta da! Ich bin ein String."
Eine einfache Ansammlung von Buchstaben, Zeichen und Symbolen, umgeben von Anführungszeichen. Packen wir das in runde Klammern ein, damit der String nicht friert, schreiben wir links ein printf
hin und rechts ein Semikolon:
printf("Ta da! Ich bin ein String.");
Und fertig ist die C-Anweisung, um den genannten String auf dem Bildschirm darzustellen.
Aber betrachten Sie nun diesen String:
"Er sagte: "Ta da! Ich bin ein String.""
Ist das verboten oder was? Es ist immer noch ein String, aber nun mit mehrfachen Anführungszeichen. Acht Striche schwirren um den String. Wie wird er damit fertig?
Der C-Compiler bestraft Sie nicht dafür, wenn Sie etwas ausprobieren. Fehler sind eine sichere Sache, also lasst uns ein wenig experimentieren.
Erzeugen Sie das folgende Programm Dblquote.c
, das im Wesentlichen wieder nur ein »printf schreibt was«-Programm ist. Das ist bereits das ganze Experiment.
#include <stdio.h>
int main()
{
printf("Er sagte: "Ta da! Ich bin ein String."");
return 0;
}
Listing 3.2: Name: Dblquote.c
Tippen Sie den Programmcode genauso ab, wie er da steht. Achten Sie vor allem auf die Anführungszeichen. Speichern Sie die Datei ab und starten Sie das Programm.
Wenn Sie können! Die Chancen sind hoch – beziehungsweise absolut sicher –, dass Sie einen der folgenden Fehler erhalten, wenn Sie kompilieren wollen:
fehlende ')' vor Bezeichner 'Ta'
oder
Funktionsaufruf ohne )
oder
Syntaxfehler vor "Ta"
oder
expected ')' before 'Ta'
Der genaue Wortlaut unterscheidet sich von Compiler zu Compiler, aber die Fehlermeldung wird sinngemäß erscheinen.
Das Problem ist, dass printf
einen in Anführungszeichen eingeschlossenen Text benötigt. Der Compiler weiß das. Nach dem zweiten Anführungszeichen, vor dem Wort Ta
, erwartet der Compiler etwas anderes, höchstwahrscheinlich die zweite Klammer )
oder eine andere gültige C-Anweisung. Aber davon ist hier nichts zu sehen, also erzeugt er den Fehler. Glück gehabt.
Offensichtlich gibt es keinen Grund, warum doppelte Anführungszeichen in einem String auftauchen können, sodass der Compiler ins Stolpern gerät. Die Lösung besteht in der Verwendung einer Escape-Sequenz.
Ein String darf keine doppelten Anführungszeichen oder einige der anderen im nächsten Abschnitt aufgelisteten Zeichen enthalten. Er muss mit einem Anführungszeichen beginnen und mit einem Anführungszeichen enden. Aber mittendrin? Keine Chance.
Um solche besonderen Zeichen auszugeben, müssen Sie Escape-Sequenzen verwenden; dies ist ein spezieller Weg, um andersartige Zeichen in einem String unterzubringen, ohne das printf
zu stören.
Wenn Sie mit einer integrierten Entwicklungsumgebung arbeiten, haben Sie den Fehler eventuell bereits bei der Eingabe bemerken können, weil die Textfärbung des Strings nicht mehr korrekt war. Dies ist einer der Vorteile einer integrierten Entwicklungsumgebung. Unser Code::Blocks tut das leider erst nach dem Aufruf des Compilers, noch nicht während der Eingabe.
In den alten Tagen wäre ein Programmierer auch ohne diese Zeichen ausgekommen. Statt den mehrfachen doppelten Anführungszeichen hätte er einfach zwei Apostrophe verwendet. Einige altehrwürdige Programmierer, die sich mit Escape-Sequenzen nicht auskennen, nutzen solche Tricks immer noch.
Einige Escape-Sequenzen
Escape-Sequenzen verwendet man, um einige unzulässige Zeichen in Strings einzubauen. Dazu benutzt man den Backslash \
. Sie erreichen das Zeichen mit printf
auf einen Backslash stößt, denkt