Die Lieblingsfarbe von Marcus ist Marcus
Tja Marcus, mal wieder zu viel getrunken? Merken Sie sich also, dass Sie sich an die Reihenfolge halten müssen. Genau wie in Ihrer Steuererklärung, da können Sie ja auch nicht die Reihenfolge durcheinanderwerfen (na ja, Sie können schon … aber auch das führt nicht zum gewünschten Erfolg, genau wie hier).
Zum Schluss noch eine kleine Änderung:
printf("Die Lieblingsfarbe von %s ist %s\n", "Katthriya", color);
Statt der Variablen name
wird eine Stringkonstante benutzt. Eine Stringkonstante ist ein einfacher String in Anführungszeichen eingeschlossen. Sie kann sich nie ändern, anders als eine Variable, die alles enthalten kann (sie ist eben konstant und nicht variabel).
Starten Sie das Programm. Es funktioniert immer noch, aber egal, welchen Namen Sie eintippen, der Computer besteht immer auf dem Namen »Katthriya«.
Die Stringkonstante "Katthriya" funktioniert, weil der Platzhalter %s nach einem String sucht. Es spielt keine Rolle, ob es sich um eine Stringvariable oder einen »echten« Textstring handelt. (Natürlich ist der Vorteil von einem Programm, dass man Variablen zur Speicherung von Eingaben benutzen kann. Eine Konstante zu benutzen, ist ein wenig sinnlos, weil der Computer und Sie schon vorher wissen, was ausgegeben wird.)
Der Platzhalter %s in einer printf-Funktion sucht nach einer zugehörigen Stringvariablen und fügt den Inhalt in den dargestellten Text ein.
Für jedes %s im Formatstring einer printf-Funktion benötigen Sie auch eine Stringvariable. Fehlt die Variable, können allerlei ungewünschte Effekte auftreten.
Zusätzlich zu Stringvariablen können Sie auch Stringkonstanten einsetzen, sogenannte Literale. Das ist nicht sonderlich clever, weil man keine Zeit mit dem %s verschwenden muss, wenn man ohnehin schon weiß, was herauskommt (ich musste es hier mal zeigen, sonst müsste ich sofort ins Gefängnis für C-Lehrer gehen).
Achten Sie darauf, dass die Reihenfolge der Variablen stimmt. Das ist besonders wichtig, wenn Sie sowohl numerische als auch Stringvariablen benutzen.
Das Prozentzeichen
%
ist ein heiliges Zeichen. Om! Falls Sie ein Prozentzeichen in einer Ausgabe von printf
darstellen wollen, müssen Sie zwei benutzen: %%
. (Raten Sie mal, wie viele Sie angeben müssen, wenn in der Ausgabe von printf
drei Prozentzeichen erscheinen sollen …)
Bemerkungen, Kommentare und Vorschläge
Ein wichtiger Aspekt in der Programmierung ist, dass man sich auch noch daran erinnert, was man tun wollte. Ich meine damit nicht die Programmierung selbst – das kann man sich leicht merken und es gibt genug Bücher und Hilfen zum Nachblättern. Nein, woran man sich erinnern muss, ist, was ein Programm an einer bestimmten Stelle tun sollte. Das kann man erreichen, indem man einen Kommentar in den Quelltext einfügt.
Kommentare sind nicht wirklich notwendig bei den kleinen Programmen, die wir in diesem Buch erörtern. Sie sind nicht notwendig, solange man keine größeren Programme schreibt, aber spätestens, wenn Sie ein eigenes Office-Paket programmieren, werden Sie irgendwann einzelne Ideen auch wieder vergessen. Damit Sie sich selbst daran erinnern können, was Sie im Programm tun, sollten Sie einen Kommentar im Quelltext einfügen, der Ihren Ansatz oder die Idee erläutert. Wenn Sie dann den Quelltext noch mal überfliegen, verlieren Sie auf diese Weise nicht den Faden und es wird klar, was eigentlich passiert.
Darf ich um einen kurzen Kommentar bitten?
Kommentare in C haben einen Startpunkt und einen Endpunkt. Alles zwischen diesen zwei Punkten wird vom Compiler ignoriert, das bedeutet, Sie können jeden beliebigen Text dazwischen eingeben und das beeinflusst das Programm in keiner Weise.
/* So sieht ein Kommentar in C aus */
Das ist ein schönes und sinniges Beispiel für einen Kommentar. Oder ein anderes Beispiel, das irgendwie besser zu dieser Buchreihe passt:
/*
Hallo Compiler! Hey, mach mal'n Fehler: pirntf
Ha! Du kannst mich nicht sehen, nana.
Main MIAn main miau
*/
Der Beginn eines Kommentars wird mit einem Schrägstrich (»Slash«, sprich »Släsch«) / und einem Sternchen * eingeleitet: /*.
Das Ende eines Kommentars wird durch die umgekehrte Reihenfolge angezeigt: */.
Ja, genau hinsehen, da gibt es einen Unterschied.
Der Kommentar ist keine Anweisung in C, also muss auch kein Semikolon dahinter.
Kommentarstile
Es gibt viele Arten, um einen Quelltext zu kommentieren, aber die im Folgenden gezeigten sind die am häufigsten verwendeten:
/*
MADLIB1.C Quelltext
geschrieben von Mike Rowsoft
*/
Schon immer beliebt, der mehrzeilige Kommentar. Die erste Zeile enthält nur das /*
, die folgenden Zeilen sind allesamt Kommentarzeilen und werden daher ignoriert. Die letzte Zeile enthält nur das */
– denken Sie daran, sonst denkt der Compiler, Ihr Programm wäre nur ein einziger langer Kommentar (möglich, aber nicht empfehlenswert).
/* Eingaben von Tastatur einlesen */
Das ist ein einzeiliger Kommentar, nicht zu verwechseln mit einer C-Anweisung. Der Kommentar beginnt mit /*
und endet mit */
, das ist hundertprozentig korrekt. Denken Sie daran, es ist keine Anweisung, also brauchen Sie auch kein Semikolon.
printf("Geben Sie ein Wiewort ein: "); /* Aufforderung */
Schließlich gibtʼs noch den »Endzeilenkommentar«. Nach der Anweisung (hier eine printf
-Funktion) kommen einige Leerzeichen oder Tabs, danach der Kommentar, wieder mit dem Beginn /*
und dem Ende */
.
Wieso sind Kommentare notwendig?
Für den Compiler sind Kommentare nicht notwendig, er ignoriert sie ja sowieso. Nein, Kommentare sind für Sie, den Programmierer, gedacht. Sie geben kleine Hilfestellungen, Tipps und Vorschläge für das, was Sie tun wollen. Sie können alles in die Kommentare einfügen, aber je sinnvoller, desto hilfreicher wird es später sein.
Die meisten C-Programme beginnen mit einigen Kommentarzeilen. Alle meine C-Programme beginnen mit etwas in der folgenden Art:
/* MINICOM.C
Dan Gookin, 26.12.2020 um 3:15
Mein letzter Versuch, ein Kommunikationsprogramm
in C zu schreiben. Wuenscht mir Glueck.
*/
Diese Zeilen sagen mir etwas über das Programm und wann ich daran gearbeitet habe.
Im Quelltext können Kommentare auch als Notiz für Sie selbst verwendet werden, so wie hier:
/* das geht noch nicht richtig – wieso? */
oder so:
save = itemv; /* Wert des Eintrags speichern */
oder