Frage

Ich bin ein total C n00b versucht, mich C aus K & R zu lehren. Meine Frage ist Art von peinlich elementar. OK, hier geht: ich keine Programme mit getchar bekommen kann die Art der Ausgabe zu geben, die ich erwartet hatte. Wenn Sie geschehen, K & R auf der Hand zu haben, bin ich auf Übung 1.13 stecken. Die Frage lautet: „Schreiben Sie ein Programm ein Histogramm der Längen von Worten in seinem Eingang zu drucken.“ Und ich kann nicht einmal die horizontale Version angehen, weil dieses Problems, das ich habe.

Ich bin auf XP mit Dev-C ++ (MinGW Compiler) und Programme aus der Kommandozeile ausgeführt wird. Mein Problem ist, wenn ich versuche, mein Programm zu laufen, es wartet auf mich Zeichen einzugeben aus zu scannen, aber wenn ich fertig bin Eingeben und Enter drücken, es nicht tun alles . Ich erwarte, dass es voran gehen und das Histogramm zu drucken, wie ich erwartet hatte. In Wirklichkeit scheint es nicht einmal Wortlängen zu zählen, weil, wie Sie im Code sehen können, wenn ich versuche zu drucken, was in der ctr Array ist nur um zu sehen, ob es etwas enthält, nichts gedruckt.

Ich bin so n00b, dass ich keine Ahnung, ob es mein Code oder die Befehlszeile ist, die an Schuld. Aber ich vermute, es ist etwas, mit dem System, weil, wenn ich versuche ein Modellprogramm , geschieht das gleiche. Geben Sie in der Eingabe, drücken Sie die Eingabetaste, passiert nichts. Wenn ich Strg-C, manchmal spuckt es ein Sternchen oder zwei, die sieht nichts, wie die Modellausgabe. Andere Zeiten, tut es nichts (nur rechts zurück auf die Eingabeaufforderung geht).

Hier ist mein Code für die Übung. Ich habe einen ganzen Tag dafür ausgegeben und bin in Frage meine Fähigkeit, mit der Programmierung weiter zu machen. Ich würde wirklich, wirklich zu schätzen, wenn jemand mich aus diesem Loch bekommen könnte!

Auch habe ich eine andere Frage über das Modellprogramm mir oben erwähnt hat, aber ich denke, dass ich es in seiner eigenen Frage posten soll. Dank all:)

#include <stdio.h>

//#define 1 IN
//#define 0 OUT
int main () {
    //start w/ state = OUT
    int c = 0;
//    int state = OUT;
    int len = 0;
    int ctr[12];
    int i, j;
    i = j = 0;

    for (i = 0; i <12; i++)
        ctr[i] = 0;
    while ((c = getchar()) != EOF)
       if (c != ' ' && c != '\t' && c != '\n') {
//            state = IN;
            len++;
            printf("%d", len);
            }
       else {
            ctr[len]++;
            len = 0;
            }            
    for (i = 0; i <12; i++) 
        printf("%d\n", ctr[i]);
    for (i = 0; i <12; i++) {
        printf("%d\n", i);   
        for (j = 0; j <= ctr[i]; j++)
            printf("-");
        printf("\n");
        }
    return 0;
}
War es hilfreich?

Lösung

Ihre while-Schleife für EOF sucht, das für End-of-Datei steht, nicht end-of-line.

Unter Windows müssen Sie Strg-Z eingeben End-of-Datei zu simulieren.

Andere Tipps

Es sieht nicht wie Sie tatsächlich c (Ihre Eingabe) speichert überall ... noch sie zu drucken. Sie drucken die Größe des Strings, aber nicht die tatsächlichen Zeichen. Wenn Sie ctr [i] = c; irgendwo (das sind Sie, um das Zeichen Array Hinzufügen) und dann das Array drucken, werden Sie Ihre Eingabe sehen. Oh, und ja, die Antwort über Strg-Z ist ebenfalls wichtig. Auch, wenn Sie völlig neu in der Sprache sind, dann würde ich fordere Sie dringend Klammern um Ihre während Inhalte zu setzen. Es wird eine Weile dauern, bis Sie können nur Blick auf den Code und wissen, was in den Zuständigkeitsbereich der while-Schleife fallen wird und was nicht, wenn Sie nicht über Klammern um ihn herum.

Ich habe nichts wirklich falsch mit dem Code, so dass ich lade sie unter gcc und es scheint gut zu funktionieren, so lange wie Sie sich daran erinnern, dass Sie in einem EOF (CTRL-D) setzen müssen beenden die while-Schleife. Ich trat in 4 Zeilen und während ich noch keine Aussagen über die Richtigkeit der Antworten machen, jedes Mal wenn ich getroffen gibt ich eine Reihe von Zahlen bekam gleich die Anzahl der Zeichen, ich eintreten, gefolgt von einem Leerzeichen. Das ist genau das, was Ihr Code sagt zu tun.

Wenn ich die STRG-D eingegeben, bekam ich die zusammenfassenden Informationen. Noch einmal, ich werde keine Aussagen über die Richtigkeit der Ausgabe machen, aber ich habe zwei große Abschnitte erhalten, wie im Code beschrieben.

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