K & R的「C語言程序設計語言」第1-13題要求讀者創建一個程序,該程序將按單詞的長度製作單詞的直方圖。這些詞將由用戶輸入。奇特的結果。 #1-13 The C Programming Language Book
我試圖創建一個程序,它將存儲每個長度的多少個單詞,然後在處理直方圖之前打印出每個數組塊的整型值。無論我如何擺弄這個節目,它總會給我兩個結果中的一個;要麼是「1」,要麼我認爲是一個數組地址? 「6422476」。這是爲什麼發生?
#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)您可以通過只是在做擺脫第一循環的' int word_count [GREATEST] = {0};'2)'word_count [word-1] + = 1;'如果'word'等於'0',比如說第一個字符輸入是空格, 3)你從不計數最後的單詞; 4)你的字數會包括換行符,句點和其他非字母字符。 –
@Paul Griffiths我唯一的問題是你的第三點,不會 for(int j = 0; j
Dynathus
該循環打印直方圖,它與計算單詞無關。當你遇到一個空間時,你只會計算一個單詞。除非你讀的最後一個字符是一個空格,'word_count [word-1] + = 1;'不會被執行到最後一個單詞,所以它不會被計算。 –