Frage

im Beispiel:

#include <stdio.h>

main()
{
    long nc;

    nc = 0;
    while (getchar() != EOF)
        ++nc;
    printf("%ld\n", nc);
}

Ich verstehe nicht ganz. putchar () würde den Charakter heraus gestellt, aber warum ist es, dass nach EOF es alle Zeichen löscht, und wo es all diese Zeichen erinnern? Danke.

War es hilfreich?

Lösung

Es heißt Pufferung und es wird durch das Betriebssystem. Normalerweise tut es Zeile Pufferung, wo es speichert nur jedes Zeichen, das Sie es in Speicher abgelegt, und dann schreibt sie alle in die Datei, wenn es einen Zeilenumbruch trifft. Das spart Ressourcen, da Dateioperationen als andere Operationen viel mehr Zeit in Anspruch nehmen. Anstatt also Ausgang tut mit jedem einzelnen Zeichen, wartet es für eine Reihe von Zeichen im Puffer zu sammeln und schreibt sie aus alle in einem Rutsch.

Es ist nur ein kluges Manöver der OS getan, dass Sie, der Programmierer, brauchen nicht zu befürchten. werfen Sie Ihre Zeichen nur an sie eins nach dem anderen und lassen den Rest das OS Griff auf seine eigene Weise.

Andere Tipps

[ Dies ist keine Antwort, aber man kann nicht Code in den Kommentaren stellen ]

Ich glaube, Sie so etwas wie dies gemeint:

#include <stdio.h>

main()
{
    long nc;
    nc = 0;
    char c;
    while ((c = getchar()) != EOF)
    {
       putchar(c); /* prints one char */
        ++nc;
    }
    printf("%ld\n", nc); /* prints the number of characters read */
}

Nein, wo dieser Code nur leeren Sie den Eingang und schreiben, wie viele Zeichen vor dem Flush gelassen wurden.

Dies ist sicher sein, dass das keine Zeichen in der Eingabedatei verbleibenden (stdin)

Lassen Sie uns Bewertung der Code:

#include <stdio.h>

So weit, so gut ...

main()
{
  1. Die main() Funktion immer zurückkehrt ein int. Immer.
  2. Deklarieren von Funktionen ohne Rückkehr Typ ist schlechte Form, wie es standardmäßig int, aber die Leute mich nicht erinnern, dies einfach beim Lesen Code.

Bewegen Sie sich auf ...

long nc;

nc = 0;

Die gute Form. Die Variable initialisiert wird, bevor es verwendet wird.

while (getchar() != EOF)
    ++nc;

Dies ist ein wenig komplexer. Aber ein Schritt nach dem anderen.

  1. Die getchar Funktion liefert ein int von der Standardeingabe.
  2. wird dieser Wert dann im Vergleich zu EOF.
  3. Wenn der int Wert von Standard Eingabe nicht EOF wird, wird die Variable nc erhöht.

So die while Schleife zu verlassen, muss ein EOF von der Standardeingabe erzeugt werden.

Hinweis: Keiner der Werte aus der Standardeingabe gelesen werden gespeichert . Jeder Wert wird verworfen, nachdem der Ausdruck ausgewertet wird.

Style : Ich schlage vor, mit '{' und '}' nach jeder while Aussage. Dies ist ein sicher Gewohnheit, in.

printf("%ld\n", nc);

Die obige Aussage druckt (Anzeige), um den Wert in nc. Der Wert in nc stellt die Anzahl der Zeichen von der Standardeingabe lesen. Diese Aussage hat nicht angezeigt werden alle Zeichen von der Standardeingabe.

}

Schließlich ist das main Programm muss einen Wert an das Betriebssystem zurück. Zwei tragbare Werte sind EXIT_SUCCESS und EXIT_FAILURE, die in stdlib.h definiert sind. Die Angabe einer dieser Werte wäre auch eine gute Gewohnheit sein.

BTW, gibt es keinen putchar im Beispiel Sie geschrieben (was ich in diese Antwort kopiert).

putchar die Zeichen in die Puffer setzen, wenn es darum geht, eine eingeben, dann wird es die Zeile Wort Ausgabe auf den Bildschirm bringen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top