C Programmierung Tutorial Teil 5 – Zeichenvariablen

In den beiden vorhergehenden Tutorials haben wir die Grundlagen von Variablen diskutiert, einschließlich der Frage, wie sie den Speicher belegen. Aber wir haben uns hauptsächlich auf Ganzzahlen und Floats konzentriert. In diesem Tutorial werden wir über Zeichen (oder zeichenartige Variablen) diskutieren.

Variablen vom Typ’char‘ belegen 1 Byte (oder 8 Bit) im Speicher, wie ich bereits bei ‚int‘ und ‚float‘ erwähnt habe, können Sie mit dem folgenden C-Programm den Speicherbedarf eines Zeichens auf Ihrem System überprüfen:

#include <stdio.h>
int main (void)
{
printf("\n sizeof char in bytes is %u", sizeof(char));

return 0;
}

Auf meinem System war das Folgende die Ausgabe:

 sizeof char in bytes is 1

Nun kommt die Frage, wie man Zeichen als Eingabe vom Benutzer akzeptiert und wie man sie in der Ausgabe ausdruckt. Nun, um Zeichen in der Eingabe zu akzeptieren, gibt es eine spezielle Funktion namens’getchar‘. Ähnlich wie beim Drucken einzelner Zeichen haben Sie auch hier „putchar“. Das folgende Stück Code soll Ihnen eine bessere Vorstellung davon geben, wie diese Funktionen funktionieren:

#include <stdio.h>
int main (void)
{
int c;
c = getchar();
putchar(c);

return 0;
}

Der obige Code wartet bei seiner Ausführung zunächst darauf, dass der Benutzer ein Zeichen eingibt. Danach gibt es einfach das gleiche Zeichen auf dem Terminal aus.

Es könnte für Sie etwas überraschend sein, dass der Wert’getchar‘ in einer ganzen Zahl gespeichert ist, aber so ist es nun mal (die Funktion gibt ein int zurück). Sie können aber immer den von’getchar‘ zurückgegebenen Wert mit einem Zeichen vergleichen. Hier ist ein Beispiel:

#include <stdio.h>
int main (void)
{
int c;
c = getchar();
if(c == 'a')
{
printf("matched");
}
else
{
printf ("doesn't match");
}
return 0;
}

Wenn der Benutzer also hier’a‘ eingibt, dann druckt das Programm’matched‘ in der Ausgabe. Andernfalls sieht man, dass „nicht übereinstimmt“.

Oh, und ja, dies ist das erste Mal, dass wir ‚if‘ und ‚else‘ Anweisungen verwenden. Wie Sie inzwischen verstanden haben, können Sie mit ‚if‘ eine Reihe von Anweisungen ausführen, wenn eine Bedingung wahr ist. Wenn die Bedingung „if“ fehlschlägt, tritt die Codeausführung automatisch in den Block „else“ ein. Beachten Sie, dass Sie eine ‚if‘-Anweisung ohne und ‚else‘-Anweisung verwenden können, aber umgekehrt ist sie nicht gültig.

Nun, um auf getchar und putchar zurückzukommen, lassen Sie uns kurz besprechen, wie diese Funktionen zur Lösung realer Probleme eingesetzt werden können. Nehmen wir an, Sie wollen die Anzahl der Zeilen zählen, die ein Benutzer als Eingabe für Ihr Programm zur Verfügung gestellt hat, dann können Sie das auf folgende Weise tun:

#include <stdio.h>
int main (void)
{
int c =0, counter=0;
c = getchar();
while(c != EOF)
{
c = getchar();
if(c == '\n')
counter = counter+1;
}
printf("\n The input contains %d lines \n", counter+1);
return 0;
}

Um das obige Programm zu verstehen, müssen Sie zuerst wissen, was EOF ist. Nun, EOF steht für End Of File. Es wird verwendet, um zu signalisieren, dass der Benutzer mit der Eingabe von Eingaben fertig ist.

Wenn Sie als Benutzer, der Eingaben macht, mit dem Prozess fertig sind, drücken Sie also Strg+d (ein paar Mal). Es ist diese Aktion, die einen Wert erzeugt, der dem von EOF entspricht, der im Programm überprüft werden kann – genau wie bei uns.

Um auf das Programm zurückzukommen, überprüfen Sie zunächst das erste Zeichen der Eingabe, um festzustellen, ob es sich um EOF handelt. Wenn dies nicht der Fall ist, betreten Sie die while-Schleife und überprüfen kontinuierlich jedes Zeichen, bis Sie ein EOF erhalten. Während dieses gesamten Prozesses, wenn Sie ein Zeilenumbruchzeichen (\n) erhalten, erhöhen Sie die Variable „Zähler“.

Nachdem und EOF erkannt wurde, wird die while-Schleife beendet und wir drucken die Anzahl der Zeilen, die einen mehr als der Wert des Zählers beträgt.

Der Grund, warum wir in der Funktion „printf“ einen zum „Zähler“ hinzufügen, ist, dass die Anzahl der Zeilen immer um einen Faktor mehr ist als die Anzahl der Zeilenumbrüche (oder im Allgemeinen, wie oft der Benutzer die Taste „Enter“ gedrückt hat). Dies setzt natürlich voraus, dass der Benutzer, wenn er die Eingabetaste drückt, auch einen Text eingibt.

Wenn Sie also diesem Programm eine Eingabe wie die folgende geben:

Hello 
Welcome to HowtoForge 
Thanks

Die Ausgabe wäre:

The input contains 3 lines

Beachten Sie, dass unser Code davon ausgeht, dass der Benutzer mindestens eine Zeile eingeben wird. Einige Eckfälle werden nicht absichtlich behandelt, um die Dinge einfach zu halten. Einer ist, wenn der Benutzer EOF bereitstellt, ohne ein anderes Zeichen in der Eingabe anzugeben, und der andere, wenn eine Zeile bereitgestellt wurde, ohne ein Zeilenumbruchzeichen anzugeben.

Die Berechnung der Zeilenanzahl ist nur ein Beispiel. Sie können diesen Code auch erweitern, um die Gesamtzahl der vom Benutzer eingegebenen Wörter zu berechnen. Betrachten Sie dies als eine Aufgabe und versuchen Sie, es selbst zu kodieren. Als Hinweis würde ich sagen, betrachten Sie Leerzeichen (‚ ‚) und Tabulatoren (‚ \t‘), ähnlich wie wir Newlines (‚ \n‘) zur Berechnung der Anzahl der Zeilen betrachtet haben.

Fazit

In diesem Tutorial haben wir etwas mehr über Zeichen diskutiert, einschließlich der Frage, wie man sie verwendet, sie als Eingabe akzeptiert und sie in der Ausgabe ausgibt. Wir diskutierten auch ein Beispiel, bei dem die getchar-Funktion uns geholfen hat, die Anzahl der Zeilen im Input zu berechnen. Probieren Sie die Aufgabe aus, die ich im letzten Absatz gegeben habe, und lassen Sie es mich wissen, wenn Sie irgendwelche Zweifel oder Fragen haben.

Das könnte dich auch interessieren …