GNU/Linux >> LINUX-Kenntnisse >  >> Linux

C-Programmier-Tutorial Teil 5 - Zeichenvariablen

In den beiden vorherigen Tutorials haben wir die Grundlagen von Variablen besprochen, einschließlich der Art und Weise, wie sie Speicher belegen. Aber wir haben uns hauptsächlich auf Integer und Floats konzentriert. In diesem Tutorial werden wir über Zeichen (oder Variablen vom Typ char) sprechen.

Variablen vom Typ 'char' belegen 1 Byte (bzw. 8 Bit) im Speicher. Wie ich bereits im Fall von 'int' und 'float' erwähnt habe, können Sie mit dem folgenden C-Programm überprüfen, wie viel Speicher ein Zeichen auf Ihrem System belegt:

#include <stdio.h>

int main (void)
{
printf("\n sizeof char in bytes is %u", sizeof(char));

return 0;
}

Auf meinem System war die folgende Ausgabe:

 sizeof char in bytes is 1                                                                                               

Nun stellt sich die Frage, wie man Zeichen als Eingabe vom Benutzer akzeptiert und wie man sie in der Ausgabe ausgibt. Nun, zum Akzeptieren von Zeichen in der Eingabe gibt es eine spezielle Funktion namens "getchar". Um einzelne Zeichen zu drucken, haben Sie in ähnlicher Weise 'putchar'. Das folgende Stück Code soll Ihnen eine bessere Vorstellung davon vermitteln, 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 dasselbe Zeichen am Terminal aus.

Es könnte für Sie etwas überraschend sein, dass der von „getchar“ zurückgegebene Wert in einer Ganzzahl gespeichert wird, aber so ist es (die Funktion gibt eine Ganzzahl zurück). Aber Sie können den von 'getchar' zurückgegebenen Wert immer 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 also hier der Benutzer „a“ eingibt, gibt das Programm „matched“ in der Ausgabe aus. Andernfalls erhalten Sie die Meldung „stimmt nicht überein“.

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 „if“-Bedingung fehlschlägt, tritt die Codeausführung automatisch in den „else“-Block ein. Beachten Sie, dass Sie eine 'if'-Anweisung ohne und eine 'else'-Anweisung verwenden können, aber umgekehrt ist nicht gültig.

Kommen wir nun zurück zu getchar und putchar und lassen Sie uns schnell diskutieren, wie diese Funktionen verwendet werden können, um reale Probleme zu lösen. Angenommen, Sie möchten die Anzahl der Zeilen zählen, die ein Benutzer als Eingabe für Ihr Programm bereitgestellt hat, dann können Sie dies 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 anzuzeigen, dass der Benutzer mit der Eingabe fertig ist.

Wenn Sie also als Benutzer, der Eingaben macht, mit dem Vorgang fertig sind, drücken Sie 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 wir es getan haben.

Wenn Sie zum Programm zurückkehren, überprüfen Sie zuerst das erste Zeichen der Eingabe, um festzustellen, ob es sich um EOF handelt. Ist dies nicht der Fall, treten Sie in die While-Schleife ein und prüfen kontinuierlich jedes Zeichen, bis Sie ein EOF erhalten. Während dieses ganzen Prozesses erhöhen Sie immer dann, wenn Sie ein Zeilenumbruchzeichen (\n) erhalten, die 'Zähler'-Variable.

Nachdem EOF erkannt wurde, wird die While-Schleife beendet und wir geben die Anzahl der Zeilen aus, die um eins größer ist als der Wert von Zähler.

Der Grund, warum wir 'counter' in der 'printf'-Funktion um eins ergänzen, ist, dass die Anzahl der Zeilen immer um eins höher ist als die Anzahl der Zeilenumbruchzeichen (oder in einfachen Worten, wie oft der Benutzer die 'Enter'-Taste gedrückt hat). Dies setzt natürlich voraus, dass der Benutzer immer dann, wenn er die Eingabetaste drückt, auch 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 bereitstellt. Einige Eckfälle werden nicht absichtlich gehandhabt, um die Dinge einfach zu halten. Einer ist, wenn der Benutzer EOF bereitstellt, ohne ein anderes Zeichen in der Eingabe bereitzustellen, und der andere ist, wenn eine Zeile bereitgestellt wurde, ohne ein Zeilenumbruchzeichen bereitzustellen.

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 codieren. Als Hinweis würde ich sagen, berücksichtigen Sie Leerzeichen (' ') und Tabulatoren ('\t'), ähnlich wie wir Zeilenumbrüche ('\n') berücksichtigt haben, um die Anzahl der Zeilen zu berechnen.

In diesem Tutorial haben wir etwas mehr über Zeichen gesprochen, einschließlich ihrer Verwendung, ihrer Annahme als Eingabe und ihrer Ausgabe. Wir haben auch ein Beispiel besprochen, bei dem die getchar-Funktion uns geholfen hat, die Anzahl der Zeilen in der Eingabe 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.


Linux
  1. Linux C-Programmier-Tutorial Teil 10 - Variable Gültigkeitsbereiche

  2. Linux C-Programmier-Tutorial Teil 9:Strings

  3. Linux C-Programmier-Tutorial Teil 8 – Aufruf nach Wert vs. Aufruf nach Zeiger/Adresse

  4. Linux C-Programmier-Tutorial Teil 8 – Aufruf nach Wert vs. Aufruf nach Zeiger/Adresse

  5. Linux C-Programmier-Tutorial Teil 8 – Aufruf nach Wert vs. Aufruf nach Zeiger/Adresse

Shell-Scripting Teil 2:Akzeptieren von Eingaben und Ausführen von Shell-Arithmetik

Gewusst wie:Einführung in die Programmierung – Variablen, Typen und Datenbearbeitung

Bash-Variablen-Tutorial – 6 praktische Bash-Beispiele für globale und lokale Variablen

Fortgeschrittene reguläre Ausdrücke im Grep-Befehl mit 10 Beispielen – Teil II

Reguläre Ausdrücke im Grep-Befehl mit 10 Beispielen – Teil I

Best Practices für die Programmierung von Linux-Systemen in C-Sprache – Teil 1