Ich arbeite mit dem Classic K & R Buch "The C Programming Language", Second Edition.C Programmiersprache Beispiel Über Arrays
Ich habe dieses Problem mit der Übung in Seite 24 über Arrays.
Übung (Kopieren und Einfügen von PDF) sagen:
#include <stdio.h>
/* count digits, white space, others */
main()
{
int c, i, nwhite, nother;
int ndigit[10];
nwhite = nother = 0;
for (i = 0; i < 10; ++i)
ndigit[i] = 0;
while ((c = getchar()) != EOF)
if (c >= '0' && c <= '9')
++ndigit[c-'0'];
else if (c == ' ' || c == '\n' || c == '\t')
++nwhite;
else
++nother;
printf("digits =");
for (i = 0; i < 10; ++i)
printf(" %d", ndigit[i]);
printf(", white space = %d, other = %d\n",
nwhite, nother);
}
In diesem Fall sagt das Buch, das nach dem Programm der folgenden Ausgabe ausgeführt wird.
An dieser Stelle das Buch verwirrend, weil es, dass die Person, die Eingabe nicht sagen ...
Die Ausgabe dieses Programms auf sich selbst ist Ziffern = 9 3 0 0 0 0 0 0 0 1, Leerraum = 123, andere = 345
Ok, Jetzt werde ich meinen kopierten Code aus dem Buch setzen
Dies ist meine Übung von eclipse-kopiert und einfügen:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int c, i, nwhite, nother;
int ndigit[10];
nwhite = nother = 0;
for (i = 0; i < 10; ++i) {
ndigit[i] = 0;
}
while ((c = getchar()) != EOF) {
if (c >= '0' && c <= '9')
++ndigit[c - '0'];
else if (c == ' ' /*|| c == '\n'*/|| c == '\t')
++nwhite;
else
++nother;
}
printf(" After ");
printf(" Var c %d \n", c);
printf(" Var i %d \n", i);
printf(" Var nwhite %d \n", nwhite);
printf(" Var nother %d \n", nother);
printf(" Digits are = ");
for (i = 0; i < 10; ++i)
printf(" %d ", ndigit[i]);
return EXIT_SUCCESS;
}
Wenn ich es laufen und geben Sie so etwas wie:
abc def ghi jkl 123
ich erhalten diese Ausgabe:
Nach Var c -1 Var i 10 Var nwhite 4 Var nher 13 Ziffern sind = 0 1 1 1 0 0 0 0 0 0
Mein Code unterscheidet sich nur vom Original in den letzten Zeilen Becose Ich benutze dieses printf, um den Wert der Variablen zu sehen.
Und das ich umbenennen/|| c == '\ n'/weil ich es nicht wie ein Weiß zählen möchte.
Der Rest denke ich, das ist gleich und scheint gut zu funktionieren, mag Buch Beispiel.
Frage:
Warum die Werte des Beispiels sie mir erzählen?
Meine Frage ist, dass ich nicht diese Ausgabemittel verstehen, oder dass es auf die Informationen, die ich habe eingegeben bezogen werden:
Input: abc def ghi jkl 123
Ausgang: Digits sind = 0 1 1 1 0 0 0 0 0 0
Final:
ich an dieser Stelle eine Erklärung zu schätzen wissen würde, dass das Buch für meinen nicht klar ist und keine Ich verstehe wirklich, dass diese Werte zeigen.
Added 2014.05.06:
Lösung meines Zweifels.
Firts
Als erstes habe ich allen danken für ihre Hilfe bei der Frage (Links des Buches) wollen, dachte ich, es in der Öffentlichkeit war. Ich werde dies für zukünftige Post berücksichtigen.
Vielen Dank an: WhozCraig und Amir für ihren unschätzbaren Input und dank ihnen endlich in der Lage, die Übung zu verstehen.
Und natürlich, um sicherzustellen, habe ich verstanden, der nächste Schritt Überprüfung durchzuführen, die zukünftige Leser helfen angebracht Beitrag zu klären:
Um sicherzustellen, dass ich verstand ich den folgenden Test gemacht:
In diesem neuen Fall führen wir die folgende Reihe ein;
ab cd ef gh 1234136
After Var c -1
Var i 10
Var nwhite 4
Var nother 9
Digits = 0 2 1 2 1 0 1 0 0 0
Und in der Tat die 0, und jetzt WHE haben 2 (Einer) 1 (zwei) 2 (zu dritt) 1 (vier), habe ich absichtlich weggelassen fünf auf die Überprüfung 0 (Fünfer ist OK) und schließlich 1 (sechs), und das nächste für 7,8 und 9 sind empy.
Das ist !!!
+1 für K & R und eine klare erste Frage – timgeb
Ich bezweifle ernsthaft, dass die Herausgeber von K & R2 die Erlaubnis gegeben haben, dass ihr Buch kostenlos veröffentlicht wird. Ich habe den Link von Ihrer Frage gelöscht. (Das gepostete PDF lässt den ursprünglichen Copyright-Hinweis des Buches weg.) –
So wie ich Kernighan & Ritchie respektiere, denke ich, dass dieser Code ernsthaft geschweifte Klammern benötigt. –