2017-07-20 3 views
2

Einführung: Ich bin ein Anfänger in C-Programmierung und mein Führer empfohlen "Die C-Programmiersprache" von Brain W. Kernighan. Beim Lesen des Buches stieß ich auf einen Code, der nicht ganz so funktioniert wie erwartet.Änderung von C-Code zur Verarbeitung der Eingabe

Das Problem: Die Konsole wartet auf weitere Eingaben, auch nachdem ich den gewünschten Text eingegeben habe. Grundsätzlich kann die Konsole nicht wissen, wann sie mit der Verarbeitung der Eingabe beginnen soll. Es ist sehr hilfreich, wenn jemand Änderungen am Code vorschlagen könnte, damit der Benutzer den Compiler anweisen kann, mit der Verarbeitung der bereitgestellten Eingabe zu beginnen.

Code:

#include <stdio.h> 

#define IN 1   // inside a word 
#define OUT 0   // outside a word 

    // program to count number of lines, words and characters in input 

int main() 
{ 
    int c, nl, nw, nc, state; 

    state = OUT; 
    nl = nw = nc = 0; 
    while ((c = getchar()) != EOF) 
    { 
     ++nc; 

     if (c == '\n') 
      ++nl; 
     if (c == ' ' || c == '\n' || c == '\t') 
      state = OUT; 
     else if (state == OUT) 
     { 
      state = IN; 
      ++nw; 
     } 
    } 

    printf("%d %d %d\n", nl, nw, nc); 

} 

Weitere Informationen:
Buch: The C Programming Language - von Brian W. Kernighan
Kapitel: Ein Tutorial Einleitung (Seite 20)
Verwenden von Xcode Version 8.3.3 (8E3004b)

+6

Drücken Sie Strg + Z (oder D in Unix). oder Execute wie './your_program BLUEPIXY

+0

Sie sollten wirklich ein neueres Buch bekommen. Einige der Syntax von C hat sich seit 1988 geändert. – stark

+0

@stark Ich würde mich freuen, wenn Sie ein anderes Buch empfehlen könnten, das moderne Syntax behandelt –

Antwort

2

Auf einem Unix-ähnlichen System, wenn Sie STRG-D am Anfang einer Zeile in der Konsole eingeben, entspricht dies EOF (die Bedingung in Ihrer While-Schleife). Wenn Sie Windows verwenden, verwenden Sie stattdessen STRG-Z.

+0

Ich habe immer noch eine Sache nicht verstanden. Sobald ich Strg + D (EOF-Zeichen) drücke, wird die Ausgabe gedruckt. Das bedeutet, dass der Code bereits alle Eingaben vor dem EOF-Zeichen analysiert hat. Im Grunde genommen waren alle Arbeiten bereits erledigt und sobald Strg + D gedrückt wurde, wurde die Ausgabe auf dem Bildschirm gedruckt, der bereits bearbeitet wurde. Ist das richtig? –

Verwandte Themen