Anzeige:
Ergebnis 1 bis 4 von 4

Thema: C: getchar()

  1. #1
    Registrierter Benutzer Avatar von Katzenstreu
    Registriert seit
    03.12.2008
    Ort
    Hamburg
    Beiträge
    27

    Question C: getchar()

    Hallo,

    ich habe ein Problem mit einem Beispielcode, den ich nicht verstehe. Er ist aber schön kurz:
    Code:
    #include <stdio.h>
    
    int main(void)
    {
        int c;
        int anzahl = 0;
        c = getchar();
        if (c != EOF)
    
            while (c != EOF)
                {
                    c = getchar();
                    if (c != EOF) anzahl = anzahl + 1;
                }
    
        printf ("%3d", anzahl);
        return 0;
    }
    Die Aufgabe lautete: Schreiben Sie unter Verwendung von getchar() ein
    Programm in C, dass zählt wie viele Zeichen vom Terminal eingelesen wurden.

    Das Programm funktioniert. EOF erzeugt man unter Windows mit "STRG+z", unter
    Linux mit "STRG+d". Nun zur Frage. In meinem Buch (C als erste Programmiersprache)
    steht folgendes:
    Aufgabe 3.5: Einlesen von Zeichen mit getchar()
    Der einfachste Eingabemechanismus besteht darin, ein einzelnes Zeichen von der
    Standard-Eingabe – normalerweise von der Tastatur – mit Hilfe von getchar() zu
    lesen. Die Syntax von getchar() ist:
    int getchar (void)
    Die Standardeingabe ist zeilengepuffert, das heißt, getchar() wartet, bis eine Zeile
    mit der Return-Taste abgeschlossen wird. Der Rückgabewert ist nicht vom Typ
    char, sondern vom Typ int.
    Warum kann diese Programm Zeichen zählen? Ich erwartete, dass es nur Zeilen
    zählt, was auch die zweite Teilaufgabe ist. Außerdem frage ich mich, warum der
    Code "so viele" (zwei if und eine while) Schleifen hat.

    An diesem Beispiel hänge ich schon länger und versuche mit ein Flussdiagramm zu
    denken, was mit aber nicht gelingt um den Ablauf nachvollziehen zu können.

    Viellicht ist jemand so gnädig .

    Grüße
    Tim

  2. #2
    Registrierter Benutzer
    Registriert seit
    31.12.2008
    Beiträge
    34
    Gute Frage. Ich versteh es auch nicht warum man das so kompliziert machen muss. Vorallem gibt es immer ein Zeichen zu wenig aus. Wenn man Return mit zählt. Meine Variante ist schoener

    Code:
    int main(void)
    {
      int c;
      int anzahl = 0;
    
      while((c = getchar()) != EOF)
      {
        anzahl++;
      }
      printf ("%3d", anzahl);
      return 0;
    }

  3. #3
    Registrierter Benutzer Avatar von Katzenstreu
    Registriert seit
    03.12.2008
    Ort
    Hamburg
    Beiträge
    27
    Stimmt, viel viel besser. Einfacher zu durchdenken und kürzer.
    Ich stehe in deiner Schuld, Kater .

  4. #4
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.603
    Zitat Zitat von Katzenstreu Beitrag anzeigen
    Warum kann diese Programm Zeichen zählen? Ich erwartete, dass es nur Zeilen zählt, was auch die zweite Teilaufgabe ist.
    In dem Buch steht nur, daß die Zeichen bis <Return> gepuffert werden. Damit ist aber nicht gemeint, daß man nur <Return> zurückbekommt. In der Praxis heißt dies, daß die Eingabe von "abc"+<return> dazu führt, daß die Schleife viermal durchlaufen wird (also vier Zeichen gezählt werden), aber eben erst, wenn das <return> betätigt wurde.

    Liebe Grüße,
    Axel

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •