「The C Programming Language」の質問1-13は、K &によって作成されました。Rは、長さで単語のヒストグラムを作成するプログラムを作成するよう読者に依頼します。単語はユーザによって入力されるべきである。特有の結果。 #1-13 The C Programming Language Book
私はヒストグラムを扱う前に、それぞれの配列ブロックのint値を出力する各長さの単語の数を格納するプログラムを作成しようとしました。どんなに私がこのプログラムで何かをしていても、それは常に私に2つの結果のうちの1つを与えます。 "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)あなたは、単に実行して最初のループを取り除くことができます '最初の文字入力がスペースであれば、word_countは{0}; {2} 'word_count [word-1] + = 1;'は 'word'が' 0 ' 3)あなたは決して最後の言葉を数えません。 4)改行、ピリオド、その他の文字以外の文字を単語数に含めます。 –
@Paul Griffiths私の唯一の質問は、3番目の点です。 for(int j = 0; j
Dynathus
このループはヒストグラムを出力しますが、カウントワードとは関係ありません。あなたはスペースに遭遇したときにのみ単語を数えます。読み込んだ最後の文字がスペースでない限り、 'word_count [word-1] + = 1;'は最終ワードに対しては実行されないので、カウントされません。 –