C für Dummies. Dan Gookin. Читать онлайн. Newlib. NEWLIB.NET

Автор: Dan Gookin
Издательство: John Wiley & Sons Limited
Серия:
Жанр произведения: Программы
Год издания: 0
isbn: 9783527833382
Скачать книгу
Arbeit mit Zeichenketten immer nur Funktionen, bei denen die Länge des Strings angegeben werden kann, denn so kann die Funktion prüfen, dass nicht über das Ziel hinausgeschrieben wird. Im Klartext: Wir verwenden scanf ab jetzt nie mehr. Ich habe es erwähnt, weil Sie es in vielen Lehrbüchern (noch) finden.

      Der dritte Parameter von fgets heißt stdin und bezeichnet die Standardeingabe (standard input). Damit ist die Tastatur gemeint. Bei scanf kann man sich diese Angabe sparen, weil diese Funktionen immer automatisch stdin benutzen. Lassen Sie sich davon zunächst nicht weiter beeindrucken.

      Es gibt da noch eine kleine Unschönheit mit fgets: Diese Funktion liest nämlich netterweise gleich noch die

-Taste mit. Am Ende eines mit fgets gelesenen Strings findet man daher im Regelfall noch ein \n. Das ist ein wichtiger Unterschied zu scanf. Damit müssen wir zunächst einfach leben, ich komme in Kapitel 10 darauf zurück.

       put – put – putputput – puts

      Im Grunde ist puts eine vereinfachte Version der Funktion printf. puts gibt Texte am Bildschirm aus, aber ohne die ganzen Formatierungszaubereien von printf. puts ist einfach die schlichte Variante von »Ja, ich gebe Text aus«. Im Kasten »Die Funktion puts (Text ausgeben)« erfahren Sie etwas über den Aufbau.

      

Ein großer Unterschied: puts fügt am Ende des Strings immer automatisch eine neue Zeile ein, es wird also immer ein \n ausgegeben, auch wenn Sie es nicht schreiben. Dies lässt sich nicht umgehen.

      puts kann auch verwendet werden, um eine Stringvariable auszugeben. In diesem Fall steht statt der Stringkonstanten in Anführungszeichen einfach der Name der Stringvariablen an dieser Stelle.

      Die Funktion puts (Text ausgeben)

      Die Funktion puts gibt Text auf dem Bildschirm aus – eine limitierte Version von printf ohne die Formatierungsanweisungen:

       puts(" text ");

      puts folgt ein Paar runde Klammern, dazwischen steht der auszugebende text in Anführungszeichen, den Klammern folgt wieder unser Semikolon, da auch puts eine Anweisung ist.

       Noch eine doofe Spielerei

      Damit Sie sehen, wie puts arbeitet, schreiben wir das Programm Stop.c. Ja, es ist ziemlich doof, aber Verzeihung, Sie lernen hier ja noch.

       #include <stdio.h> int main() { puts("Kann nicht aufhoeren, der Ausschalter klemmt!"); return 0; }

      Listing 3.9: Name: Stop.c

      Eingeben, kompilieren, linken, starten. Das Programm erzeugt die folgende Ausgabe:

       Kann nicht aufhoeren, der Ausschalter klemmt!

      Sie müssen am Ende des Strings kein \n für eine neue Zeile einfügen, puts macht das immer automatisch (wenn Sie das nicht wollen, müssen Sie printf bemühen).

      Genau wie printf bringt puts eine Ausgabe auf den Bildschirm. Der Text wird von Anführungszeichen umschlossen und dann von runden Klammern umzingelt.

      Genau wie bei printf muss man \" verwenden, wenn man im String irgendwo ein einfaches Anführungszeichen " einsetzen will. Für die anderen Zeichen nach einem \ gilt das übrigens auch.

      

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