2016-08-16 2 views
0

Ich lese das Buch und ich folgte dem kleinen Programm in dem Buch, gibt es ein kleines Zählprogramm, in dem ich keine Ergebnisse haben kann.Während Schleife Bugs in C

#include <stdio.h>  

int main() { 

    long nc; 

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

Als ich das laufen und einige Zeichen eingeben, ist es kein Ergebnis, und das Programm noch ausgeführt wird, ich Zeichen eingeben kann, aber noch kein Ergebnis. Gibt es etwas falsch im Code?

Und ich führe es in Xcode.

+1

Haben Sie '#include ' am Anfang des Programms? – Barmar

+3

Wie sagt man dem Programm, dass es keine Daten mehr gibt? Sie sollten Control-D auf Unix-ähnliche Systeme oder Control-Z unter Windows am Anfang einer Zeile eingeben, um anzuzeigen, dass keine Daten mehr vorhanden sind. Oder, wenn Sie eine Datei wie 'charcount.c' haben und Ihr Programm' charcount' ist, können Sie 'charcount

+0

Wenn Sie den Code richtig formatiert haben, müssten Sie nicht fragen. – Olaf

Antwort

1

Der Code ist in Ordnung, wenn die erforderlichen Header-Dateien enthalten haben:

#include <stdio.h> 

die while-Schleife zu beenden, sollten Sie ein ‚EOF‘, um das Programm zu senden.

Es gibt einen Fall, den Sie referenzieren können What is EOF in the C programming language?.

Auf Linux-Systemen und OS X ist das Zeichen für die Eingabe eines EOF Ctrl-D. Für Windows ist es Ctrl-Z.

+1

Wie lautet der Code von ''? –

+0

Ja, du hast Recht. ist keine erforderliche Header-Datei für diesen Fall. – CWLiu

1

Zunächst, wenn Sie vergessen haben, müssen Sie die stdio.h-Header-Datei enthalten und zweitens gibt es nichts falsch mit den Codes.

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

Die Codezeilen über prüft, ob das Ende der Datei und wenn es falsch zurückgibt, erhöht er nc und seine nur, wenn die while-Schleife ein Ende der Datei trifft, bevor es nc druckt. Das Ende der Datei in Linux ist Strg + D und nach der Eingabe der Zeichen, geben Sie Strg + D ein und Sie erhalten Ihre Zählung, da dies das Ende der Datei oder der Eingabe ist.

+0

Sie können auch verwenden Strg + Z als Dateiende (EOF) für Windows. – d3r1ck

+0

Das Programm benötigt stdio.h, um nc zu drucken, falls jemand fragt, warum stdio.h – d3r1ck