Frage 1-13 des Buches 'Die C-Programmiersprache' von K & R fordert den Leser auf, ein Programm zu erstellen, das ein Histogramm von Wörtern nach Länge erstellt. Die Wörter müssen vom Benutzer eingegeben werden.Besondere Ergebnisse. # 1-13 Das C-Programmiersprachenbuch
Ich habe versucht, ein Programm zu erstellen, das speichert, wie viele Wörter jeder Länge ihre dann den Int-Wert jedes Array-Blocks vor dem Umgang mit dem Histogramm ausdrucken. Egal wie sehr ich mit diesem Programm herumspiele, es wird mir immer eines von zwei Ergebnissen geben; entweder "1" oder was ich als eine Array-Adresse vermute? "6422476". Warum passiert dies?
#include <stdio.h>
#define GREATEST 10
int main(void){
int c, word=0;
int word_count[GREATEST];
/*set all values in word_count to 0*/
for(int i=0; i<GREATEST; i++){
word_count[i]=0;
}
while((c=getchar()) != EOF){
if(c != ' '){
++word;
} else{
word_count[word-1]=+1;
word=0;
}
}
for(int j=0; j<GREATEST; j++){
printf("\n%d", word_count[j]);
}
return 0;
}
1) Sie von der ersten Schleife bekommen können nur loswerden tun ' int word_count [GREATEST] = {0}; '2)' word_count [word-1] + = 1; 'verursacht Probleme, wenn' word' gleich '0' ist, sagen wir, wenn die erste Zeicheneingabe ein Leerzeichen ist; 3) Sie zählen nie das letzte Wort; 4) Sie werden Zeilenumbrüche, Punkte und andere Nicht-Buchstaben-Zeichen in Ihre Wortanzahl einschließen. –
@Paul Griffiths Meine einzige Frage ist zu Ihrem dritten Punkt, würde nicht für (int j = 0; j
Dynathus
Diese Schleife druckt das Histogramm, es hat nichts damit zu tun, Wörter zu zählen. Sie zählen nur ein Wort, wenn Sie auf ein Leerzeichen stoßen. Wenn das letzte Zeichen, das Sie gelesen haben, ein Leerzeichen ist, wird 'word_count [word-1] + = 1;' 'nicht für das letzte Wort ausgeführt, so dass es nicht gezählt wird. –