Wie man getchar in C verwendet: Anfängerleitfaden für Zeichen‑Eingabe und praktische Beispiele

1. Was ist die getchar‑Funktion?

Die getchar‑Funktion ist eine der grundlegenden Eingabefunktionen in C und wird verwendet, um ein einzelnes Zeichen von der Standardeingabe zu lesen. Diese Funktion wartet darauf, dass der Benutzer ein Zeichen über die Tastatur eingibt, und gibt dann den ASCII‑Code dieses Zeichens zurück. Sie ist nützlich für einfache Eingabe‑Operationen, etwa wenn Benutzereingaben Zeichen für Zeichen verarbeitet werden sollen.

Eigenschaften von getchar

  • Liest ein Zeichen von der Standardeingabe : Es wartet, bis die Eingabe bestätigt wird (durch Drücken von Enter), und verarbeitet dann das Zeichen.
  • Gibt den ASCII‑Code zurück : Das Zeichen wird als sein ASCII‑Code zurückgegeben, nicht als Zeichen. Möglicherweise muss es in einen Zeichen‑Typ umgewandelt (gecastet) werden.

getchar ist ideal für einfache Benutzereingaben und interaktive Programme. Da es im Vergleich zu anderen Eingabefunktionen leicht zu benutzen ist, wird es häufig in den frühen Lernphasen von C eingesetzt.

Beispielverwendung

Im Folgenden ein einfaches Beispiel mit getchar:

#include <stdio.h>

int main() {
    int c;
    printf("Please enter a character: ");
    c = getchar();
    printf("Entered character: %cn", c);
    return 0;
}

In diesem Programm wird das von der Tastatur eingegebene Zeichen gelesen und auf dem Bildschirm ausgegeben. Gibt man zum Beispiel „A“ ein, lautet die Ausgabe:

Please enter a character: A
Entered character: A

2. Grundlegende Verwendung von getchar

Aufruf

Sie können die getchar‑Funktion wie unten gezeigt aufrufen:

int getchar(void);

Diese Funktion hat keine Argumente, liest ein Zeichen und gibt dessen ASCII‑Code als Ganzzahl (int) zurück. Tritt ein Fehler auf, liefert sie EOF (End Of File).

Einfaches Zeichen‑Eingabe‑Beispiel

Wie oben gezeigt, können Sie getchar verwenden, um ein einzelnes Zeichen zu erhalten und auf dem Bildschirm anzuzeigen. Das ist praktisch, wenn nur ein Zeichen verarbeitet werden muss.

#include <stdio.h>

int main() {
    int c;
    printf("Please enter a character: ");
    c = getchar();
    printf("Entered character: %cn", c);
    return 0;
}

Dieser Code liest das Eingabezeichen mit getchar und gibt es mit printf aus.

侍エンジニア塾

3. Erweiterte Verwendung von getchar

EOF (End Of File) und getchar

Die getchar‑Funktion liest nicht nur Zeichen, sondern liefert auch EOF, wenn das Ende der Eingabe erreicht ist. Beispielsweise kann EOF erkannt werden, indem man „Ctrl+Z“ (unter Windows) oder „Ctrl+D“ (unter Unix) in der Standardeingabe eingibt.

Das folgende Beispiel liest Zeichen weiter, bis EOF eingegeben wird:

#include <stdio.h>

int main() {
    int c;
    printf("Enter characters (end with EOF): ");
    while ((c = getchar()) != EOF) {
        putchar(c);
    }
    return 0;
}

Dieser Code verwendet getchar und putchar, um Eingabezeichen wiederzugeben, bis EOF erkannt wird.

Mehrere Zeichen einlesen

Sie können getchar auch nutzen, um mehrere Zeichen zu lesen. Der nachfolgende Code liest und gibt jedes Zeichen aus, bis ein Zeilenumbruch eingegeben wird:

#include <stdio.h>

int main() {
    int c;
    printf("Please enter a string: ");
    while ((c = getchar()) != 'n') {
        printf("Entered character: %cn", c);
    }
    return 0;
}

Dieses Programm liest jedes Zeichen mit getchar und gibt es aus, bis das Zeilenumbruch‑Zeichen ('n') eingegeben wird.

4. EOF und Pufferverwaltung

Die Rolle von EOF

EOF (End Of File) markiert das Ende der Eingabe aus einer Datei oder der Standardeingabe. Wenn getchar EOF erreicht, gibt es -1 zurück, sodass Ihr Programm das Ende erkennen und die Verarbeitung beenden kann. Auf der Tastatur kann EOF über spezielle Tastenkombinationen gesendet werden.

Pufferung und getchar

Die getchar‑Funktion verwendet Eingabepufferung, sodass alle eingegebenen Zeichen in einem Puffer gespeichert werden. Wird getchar mehrfach aufgerufen, liefert es das nächste Zeichen aus dem Puffer. Das Programm fährt erst fort, wenn ein Zeilenumbruch eingegeben wurde.

Um ein Zeilenumbruch‑Zeichen im Puffer zu ignorieren, können Sie Code wie den folgenden verwenden:

#include <stdio.h>

int main() {
    int c;
    printf("Please enter a character: ");
    c = getchar();
    while (getchar() != 'n');  // Ignore the newline character in the buffer
    printf("Entered character: %cn", c);
    return 0;
}

Dieser Code stellt sicher, dass das Newline‑Zeichen aus dem Puffer gelesen und verworfen wird, bevor das Eingabezeichen angezeigt wird.

5. Vergleich von getchar mit anderen Eingabefunktionen

Unterschied zwischen getchar und scanf

Sowohl getchar als auch scanf werden zur Eingabe verwendet, aber ihr Einsatz und ihre Anwendung unterscheiden sich. scanf nutzt Format‑Spezifizierer, um verschiedene Datentypen einzugeben, wie Ganzzahlen, Fließkommazahlen und Zeichenketten. Im Gegensatz dazu liest getchar einfach ein einzelnes Zeichen von der Standardeingabe.

Beispiel: Eingabe mit scanf

#include <stdio.h>

int main() {
    int num;
    printf("Please enter a number: ");
    scanf("%d", &num);
    printf("Entered number: %dn", num);
    return 0;
}

Dieser Code verwendet scanf, um eine Ganzzahl einzulesen und anzuzeigen. scanf unterstützt mehrere Datentypen und kann mehrere Werte gleichzeitig einlesen.

Unterschied zwischen getchar und fgets

Im Gegensatz zu getchar liest fgets mehrere Zeichen (eine Zeichenkette) auf einmal von der Standardeingabe. fgets ist nützlich, um ganze Zeilen zu lesen, und ermöglicht die Angabe der Puffergröße, wodurch das Risiko von Pufferüberläufen im Vergleich zu scanf reduziert wird.

Beispiel: Eingabe mit fgets

#include <stdio.h>

int main() {
    char str[100];
    printf("Please enter a string: ");
    fgets(str, sizeof(str), stdin);
    printf("Entered string: %s", str);
    return 0;
}

Dieser Code holt eine Zeichenkette mit fgets und gibt sie aus. fgets liest bis zu einem Newline‑Zeichen, was es für mehrzeilige Eingaben geeignet macht.

Wann getchar, scanf und fgets verwenden

  • getchar wird für die Eingabe eines einzelnen Zeichens verwendet, z. B. für Menüauswahl oder das Erfassen von Tastendrücken.
  • scanf eignet sich zum Einlesen mehrerer Datentypen, erfordert jedoch Fehlerüberprüfung.
  • fgets ist praktisch für lange Zeichenketten oder mehrzeilige Eingaben und verhindert Pufferüberläufe, indem die Anzahl der gelesenen Zeichen begrenzt wird.

6. Praktisches Beispiel: Interaktives Programm mit getchar

Die Funktion getchar wird häufig in interaktiven Programmen verwendet, die Benutzereingaben verarbeiten. Hier ein Beispiel, bei dem basierend auf der Tastatureingabe bestimmte Aktionen ausgeführt werden was beim Erstellen einfacher Spiele oder Menüs hilfreich sein kann.

Beispielcode: Menüoperation basierend auf Zeichen‑Eingabe

#include <stdio.h>

int main() {
    char choice;
    printf("Select a menu (a: Hello, b: Exit): ");
    choice = getchar();

    switch (choice) {
        case 'a':
            printf("Hello!n");
            break;
        case 'b':
            printf("Exiting the program.n");
            break;
        default:
            printf("Invalid selection.n");
    }

    return 0;
}

In diesem Programm gibt der Benutzer a oder b ein, um eine bestimmte Meldung anzuzeigen. getchar ermöglicht das Erstellen einfacher Menüs und das Ausführen von Aktionen basierend auf der Benutzereingabe.

Fortgeschrittenes Programm: Umgang mit mehreren Befehlen

Der folgende Code zeigt, wie bestimmte Aktionen ausgeführt werden, wenn der Benutzer bestimmte Zeichen eingibt:

#include <stdio.h>

int main() {
    char command;
    printf("Enter a command (l: Show list, h: Greet, q: Exit): ");
    command = getchar();

    switch (command) {
        case 'l':
            printf("Showing list.n");
            break;
        case 'h':
            printf("Hello!n");
            break;
        case 'q':
            printf("Exiting the program.n");
            break;
        default:
            printf("Invalid command.n");
    }

    return 0;
}

Dieses Programm führt die entsprechende Aktion aus, wenn der Benutzer den angegebenen Befehl (l, h oder q) eingibt.

7. Tipps und bewährte Methoden für getchar

Häufiges Problem: Umgang mit dem Puffer

Ein Aspekt, den man bei getchar beachten sollte, ist, dass Restdaten im Puffer die nächste Eingabe beeinflussen können. Zum Beispiel kann nach einem Aufruf von getchar das verbleibende Zeilenumbruch‑Zeichen vom nächsten getchar aufgenommen werden. Um dies zu vermeiden, sollte der Puffer bei Bedarf geleert werden.

Wie man das Zeilenumbruch‑Zeichen ignoriert:

#include <stdio.h>

int main() {
    int c;
    printf("Please enter a character: ");
    c = getchar();
    while (getchar() != 'n');  // Skip the newline character
    printf("Entered character: %cn", c);
    return 0;
}

Dieser Code verwendet eine while‑Schleife, um das nach dem getchar‑Eingabevorgang im Puffer verbliebene Zeilenbruch‑Zeichen zu verwerfen.

Best Practices

  1. Puffer leeren : Das Zeilenumbruch‑Zeichen behandeln, damit es die nächste Eingabe nicht beeinflusst.
  2. Fehlerbehandlung : Prüfen, ob der Rückgabewert von getchar EOF ist, und entsprechend reagieren, insbesondere beim Lesen aus Dateien.
  3. Eingabe begrenzen : Bei langen Zeichenketten oder speziellen Eingabeanforderungen fgets anstelle von getchar verwenden. fgets ermöglicht die Angabe der Puffergröße, um Pufferüberläufe zu vermeiden.

8. Zusammenfassung und nächste Schritte

Dieser Artikel erklärte die Grundlagen und die erweiterte Nutzung der getchar‑Funktion, einschließlich Vergleichen mit scanf und fgets, und behandelte wichtige Punkte der Eingabe­verarbeitung in C. getchar ist ein einfaches, aber leistungsfähiges Werkzeug für verschiedene Situationen, besonders geeignet für interaktive Programme oder einfache Zeichen­eingaben.

Nächste Lernschritte

  1. fgets und scanf weiter erkunden : Wenn Sie Zeichenketten oder Zahlen verarbeiten möchten, ist es sinnvoll, mehr über fgets und scanf zu lernen.
  2. Dateieingabe verwenden : getchar kann auch zum Lesen von Daten aus Dateien verwendet werden, nicht nur von der Standardeingabe. Das Erlernen von Datei‑I/O erweitert Ihre Fähigkeiten.
  3. Fehlerbehandlung üben : Robuste Fehlerbehandlung für Eingaben implementieren, insbesondere für EOF und ungültige Eingaben, um zuverlässigere Programme zu schreiben.

Sobald Sie ein gutes Verständnis der C‑Grundlagen haben, wird das Vertiefen dieser Konzepte Ihnen helfen, praktischere Programme zu entwickeln.