2016-07-05 18 views
3

Hier ist der Code:Probleme Zählen Zeilen in Ausgabe

#include <stdio.h> 

int main(void) { 
    int nextChar; 
    int numLines = 0; 

    while ((nextChar = getchar())!= EOF) { 
     if (nextChar == '\n') { 
      ++numLines; 
     } 
    } 
    printf("The\nsky\nis\nblue\n"); 
    printf("%d lines read.\n", numLines); 
    return 0; 
} 

Es läuft, liefert aber 0 Zeilen lesen. Ich habe versucht, den Text "Der Himmel ist blau" an einer Reihe von verschiedenen Orten zu platzieren, aber nichts scheint zu funktionieren.

Der Code wurde in dem Buch gezeigt, aber ohne

printf("The\nsky\is\blue.\n"); 

aber wurde die Ausgabe wie folgt aus:

The 
    sky 
    is 
    blue. 
    4 lines read. 

irgendwelche Vorschläge ??

+2

Das sollte von Stdin lesen. Schlägst du irgendwas, während das Programm läuft? –

+2

Nach dem Start des Programms, sollten Sie * "Der Himmel ist blau" * in das Terminal eingeben, und drücken Sie dann Strg + D auf * nix oder Strg-Z auf Windows. – user3386109

+1

Sie sollten "Das Himmelblau" in das Programm eingeben oder seine Eingabe von einer Datei umleiten, die diesen Text oder etwas enthält. Auf jeden Fall soll das eine Eingabe sein, die Sie zur Verfügung stellen. –

Antwort

2

Ihr Programm sucht nach EOF zum Ausbrechen aus while Schleife. Um ein EOF einzugeben, verwenden Sie:

^Z (Ctrl + Z) in Windows 
^D on Unix-like systems 

CTRL + D funktioniert für mich auf Ubuntu. Ich habe Ihren Code in meinem Computer ausgeführt. Um die gewünschte Ausgabe zu erhalten, müssen Sie eingeben -

The (Press Enter) 
Sky (Press Enter) 
is (Press Enter) 
Blue (Press Enter) 
(and finally send EOF) 

ENTER drücken, wird ‚\ n‘ Zeichen, um das Programm auf Ubuntu senden. Windows verwendet \ r \ n, um anzugeben, dass die Eingabetaste gedrückt wurde, während Linux und Unix \ n verwenden, um anzuzeigen, dass die Eingabetaste gedrückt wurde.

0

Okay ich denke ich sehe, was Sie versuchen zu tun. Zuerst müssen Sie genau entscheiden, wie Sie Ihre Eingabe erhalten. Ich nehme an, für den Moment möchten Sie es von der Kommandozeile bekommen. Wenn du getChar() benutzt hast, zählt es 1 Zeichen plus die neue Zeile, also hast du eigentlich nur gezählt, wie viele Zeichen du eingegeben hast. Wenn du eine Zeile von der Konsole erhältst, zählt sie als ein Zeichen und n als anderes Zeichen . Sie können Ihre Escape-Zeichen in der Zeichenfolge manuell erkennen, da Sie die Sequenz "\ n" erkennen möchten. Jedes Mal, wenn Sie Enter drücken und die Zeile von der Konsole zurückgibt, erhalten Sie am Ende das Zeichen '\ n', das anders als "\ n" ist. Sie können das separat zählen, wenn Sie möchten. Hier ist ein Beispiel zur Veranschaulichung:

#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 
    char* currentChar; 
    char* nextChar; 
    int numLines = 0; 
    int bufferSize = 100; 
    char *input; 
    int inputLength; 

    input = (char *) malloc(bufferSize); 
    inputLength = getline(&input, &bufferSize, stdin); 

    for (int i = 0; i < inputLength; i++) { 
     currentChar = input[i]; 
     if (currentChar == '\\' && i < inputLength - 1) { 
      nextChar = input[i + 1]; 
      if (nextChar == 'n') 
       numLines++; 
     } 
    } 

    printf("%d lines read.\n", numLines); 
    return 0; 
}