C für Dummies. Dan Gookin

Чтение книги онлайн.

Читать онлайн книгу C für Dummies - Dan Gookin страница 37

C für Dummies - Dan Gookin

Скачать книгу

keine Platzhalter durch Variablen. Es kann wirklich nur Texte ausgeben.

      

Es gibt ebenfalls eine Funktion mit dem Namen gets. Mit dieser könnten Sie Strings von der Tastatur einlesen. Könnten Sie, sollen Sie aber nicht:

       gets(idiot);

      Denn hier wird keine Stringlänge angegeben, und bei sehr langen Eingaben über die Array-Länge hinaus zerschießen Sie Ihren Speicher! gets wurde als so gefährlich eingestuft, dass es im aktuellen C-Standard als deprecated bezeichnet wurde – veraltet. Leider finden Sie diese Funktion immer noch sehr oft in älteren C-Programmen oder Büchern.

       puts und Variablen

      puts kann Variablen ausgeben, aber nur eine pro Zeile. Wieso das? Nun ja, weil puts immer auf diesem \n-Zeichen bei der Ausgabe besteht. Auch das Einbauen einer Variablen in einen anderen String gelingt damit nicht.

      Als Beispiel nehmen wir mal an, dass Sie den Inhalt der Variablen idiot in eine einzige Zeile schreiben wollen:

       puts(idiot);

      

Verwenden Sie puts niemals mit anderen Variablen außer Stringvariablen. Das Ergebnis wird seltsam sein.

      Sie müssen eine Stringvariable zuerst durch Verwendung des Schlüsselworts char deklarieren. Danach müssen Sie die Variable mit etwas füllen, was man zum Beispiel mit fgets bewerkstelligen kann. Nur dann ergibt auch die Ausgabe mit puts einen Sinn.

      Die Funktion puts (Stringvariablen ausgeben)

      Die Funktion puts kann den Inhalt von Stringvariablen auf dem Bildschirm ausgeben – eine limitierte Version von printf ohne die Formatierungsanweisungen, da puts nur den Inhalt einer Variablen darstellen kann:

       puts( var );

      puts folgt ein Paar runde Klammern, dazwischen steht die auszugebende Stringvariable var, den Klammern folgt wieder ein Semikolon, da auch puts eine Anweisung ist.

       Licht! Kamera! Action! puts und fgets die Zweite

      Im folgenden Programm wurde gegenüber InsultSicher.c eine kleine Veränderung durchgeführt, die printf-Anweisung wurde entfernt und durch puts ersetzt.

       #include <stdio.h> int main() { char idiot[20]; puts("Name eines Idioten: "); fgets(idiot, 20, stdin); puts("Yep, ich denke auch, dass %s ein Idiot ist.\n", idiot); return 0; }

      Listing 3.10: Name: Insult2.c

      Kompilieren Sie das Programm nun und starten Sie es – wenn Sie können! Falls es sich fehlerfrei kompilieren ließe – falls –, würden Sie folgende Ausgabe sehen:

       Name eines Idioten: Karl Klammer Yep, ich denke auch, dass %s ein Idiot ist.

      Tja, wer ist dieser %s eigentlich?

      Aber zum Glück wird Ihr Compiler wahrscheinlich aufgesprungen sein und hat Ihnen einen Fehler an den Kopf geworfen, der besagt, dass puts nur ein Argument hat und kein weiteres mehr verkraftet. Genauer, dass das idiot in puts zu viel ist. puts ist nicht nur einfacher gestrickt als printf, das %s funktioniert nicht; es kann auch mit angehängten Variablen nichts anfangen.

      Wann nimmt man puts und wann printf?

      Nehmen Sie puts, wenn Sie einfach eine Zeile mit Text ausgeben wollen.

      Nehmen Sie puts, wenn Sie den Inhalt einer Stringvariablen in einer eigenen Zeile ausgeben wollen.

      Verwenden Sie printf, wenn Sie den Inhalt einer Stringvariablen in einen anderen String einbetten wollen und das Ergebnis ausgegeben werden soll.

      Verwenden Sie printf, wenn Sie mit mehr als einer Variablen gleichzeitig arbeiten wollen.

      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.

      Ändern Sie das Programm nun, wie Sie es hier sehen, kompilieren Sie es – es funktioniert nun – und starten Sie es.

       #include <stdio.h> 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

       Mehr Spaß mit printf

      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:

Скачать книгу