C für Dummies. Dan GookinЧитать онлайн книгу.
rechts\n
.
Wenn die 15 Leerzeichen als Punkte dargestellt werden, sieht man, wie printf
den Text rechts darstellt:
………rechts (und dann eine neue Zeile)
Würde man den String rechts
durch Limonade
ersetzen, würde man die folgende Zeile sehen:
…….Limonade (und dann eine neue Zeile)
Der Text ist immer noch rechtsbündig. (Übrigens: Wäre der String länger als 15 Zeichen, würde er nicht abgeschnitten.)
Die nächste Zeile sieht genauso aus, aber vor der 15
steht ein Minuszeichen:
printf("%-15s", "links\n");
Das Minus –
steht für linksbündige Ausgabe.
Dieser ganze Kram mit den Konvertierungen kann reichlich kompliziert werden, aber seien Sie sicher, dass sich nur wenige Leute das merken. Sogar fortgeschrittene C-Programmierer müssen in der Sprachreferenz nachschlagen und mit einigen Tests ausprobieren, wie die eine oder andere Formatierung wirkt. Die meiste Zeit werden Sie mit so etwas nicht belastet, also keine Panik.
scanf – lassen Sie Ihren Scanner trotzdem aus!
Ausgabe ohne Eingabe ist wie Sonne ohne Mond, Bier ohne Schaum oder ein Fisch ohne Fahrrad. Stellen Sie sich vor – das ist der schrecklichste Gedanke: Ohne Eingabe sitzt der Computer einfach da und redet die ganze Zeit zu Ihnen, ohne zuzuhören. Grauenhafte Vorstellung.
C hat zahlreiche Werkzeuge, damit der Computer Ihnen zuhört. Dazu gehört die geheimnisvolle scanf
-Funktion, die benutzt wird, um einen Text von der Tastatur einzulesen und in der Geborgenheit einer warmen und weichen Stringvariablen abzulegen.
scanf
ist eine Funktion wie printf
. Ihre Aufgabe besteht darin, Text von der Tastatur einzulesen.
scanf
kann auch Zahlen einlesen und andere erstaunliche Dinge tun, aber in diesem Abschnitt beschränken wir uns auf das Einlesen von Strings.
Ebenso wie das f in printf
bedeutet das f in scanf
»formatiert«. Sie können scanf
benutzen, um eine speziell formatierte Textpassage von der Tastatur einzulesen. Aber in diesem Abschnitt wird nur eine gewöhnliche Textzeile eingelesen, nichts Besonderes also.
Es gibt bessere Wege, um Texte von Tastatur einzulesen als über
scanf
– dazu kommen wir gleich.
scanf richtig einsetzen
Damit scanf
funktioniert, brauchen Sie Folgendes: zum einen Speicherplatz, um den eingegebenen Text abzulegen, und zum anderen natürlich die Funktion scanf
.
Der Speicherplatz wird Stringvariable genannt. String bedeutet eine Folge von Zeichen – Text. Variable bedeutet, dass der Text nicht fest ist, sondern verändert werden kann. Eine Stringvariable ist ein Lagerort für Texte in Ihrem Programm. (Variablen werden ausführlich im nächsten Kapitel erklärt.)
Das Schlüsselwort char (Definition einer Stringvariablen)
Um eine Variable zu erstellen, benötigen Sie ein C-Schlüsselwort, das dem Compiler mitteilt: »Hier will ich eine Variable haben.« Für Texte ist dies das Schlüsselwort char
:
char var[laenge];
Dem char
folgt ein Leerzeichen – oder auch ein Tabulator – und dann der Name der Variablen, var. Für Strings (also Texte mit mehr als einem Zeichen) muss die Maximallänge laenge des Strings in den eckigen Klammern angegeben werden.
Das var ist der Name der Variablen. Regeln und Beschränkungen für die Namensgebung von Variablen werden im nächsten Kapitel vorgestellt.
laenge teilt die Anzahl Zeichen mit, die der String enthalten kann. Wenn Sie also nach einem Vornamen fragen, nimmt man zum Beispiel an, dass die meisten Vornamen weniger als 20 Zeichen umfassen.
Der schließenden eckigen Klammer ]
folgt ein Semikolon, da es sich (wieder mal) um eine vollständige Anweisung der Sprache C handelt.
Und dann brauchen wir die Funktion scanf
, deren Format ähnlich dem fortgeschrittenen Format der printf
-Funktion ist.
Die Funktion scanf (Einlesen eines Strings)
Die scanf
-Funktion wird benutzt, um Informationen von der Tastatur einzulesen. In der gezeigten Form wird scanf
genutzt, um eine Textzeile einzulesen:
scanf("%s", var);
Genau wie bei der Funktion printf
folgt der Funktion scanf
allerlei Zeugs in Klammern. Aber anders als printf
gibt scanf
den Text in den Anführungszeichen nicht auf dem Bildschirm aus.
Zuerst kommt ein Formatstring, der scanf
mitteilt, auf welche Art Text zu warten ist. Wenn mit %s
eine Textzeile eingelesen werden soll, wird %s
in Anführungszeichen hingeschrieben. Diese Zeichen sagen scanf
, dass es auf eine Textzeile warten soll, die mit Drücken der
Dem Formatstring folgt ein Komma, danach der Name der Variablen. Auf diese Weise sagt man scanf
, wo der Text abgelegt werden soll.
Auch die scanf
-Funktion ist eine Anweisung in C, daher wird auch sie mit einem Semikolon abgeschlossen.
Als Beispiel wollen wir den Vornamen von jemandem einlesen; zuerst brauchen wir also Speicherplatz für den Namen:
char vorname[21];
Diese C-Anweisung stellt Speicher für einen Textstring bereit – so wie man einen Tresor für eine große Summe Geld bereitstellt. Und genau wie der Tresor ist auch die Variable »leer«, wenn man sie erstellt. Es ist nichts darin enthalten. Es können bis zu 20 Zeichen in der Variablen gespeichert werden, was durch die 21
in eckigen Klammern angegeben wird.
20? 21? Was denn nun? In Kapitel 10 über Strings werden Sie das genauer erfahren, C hat die Angewohnheit, am Ende eines Strings ein sogenanntes Nullbyte (ein
\0x
) zu speichern. Damit merkt C, wann der String zu Ende ist – vergleichbar einem Stoppschild. Für 20 Zeichen brauchen wir also 21 Zeichen.
Der nächste Schritt ist, die Funktion scanf
später im Programm zu benutzen, um Text einzulesen. Etwas wie die folgende Zeile würde funktionieren:
scanf("%s", vorname);
Und so sieht das aus Sicht von scanf
aus: »Okay, ich soll gemäß %s
einen String von der Tastatur einlesen. Und den ganzen Text speichere ich in der Stringvariablen mit dem Namen vorname
. Heiße Sache. Wenn der Benutzer jetzt noch was eintippt, könnte ich meinen Job auch erledigen.«
Abbildung 3.1 verdeutlicht das Konzept, das ich hier gerade beschrieben habe.