私はK & Rから練習問題の1つを解決していましたが、マイナーな問題があります。 エクササイズは、単語の長さのヒストグラムを入力することです。EOFの前に改行がありませんか?
ここに私のコードです:
#include <stdio.h>
#define IN 1
#define OUT 0
int main(){
//Histogram of the length of words
int c, state, len, i;
state = OUT;
printf("Histogram\n");
while ((c = getchar()) != EOF){
if (c != ' ' && c != '\n' && c != '\t' && c != '\r'){
state = IN;
len++;
} else if (state == IN){
for (i = 0; i < len; i++){
putchar('[');
putchar(']');
}
len = 0;
putchar('\n');
state = OUT;
}
}
return 0;
}
私が使用したテキストファイルだった:
Hello World! This is a text
プログラムの出力だった:
Histogram
[][][][][]
[][][][][][]
[][][][]
[][]
[]
それが見られるように、プログラムは最後の単語 'text'のヒストグラムを出力する前に終了しました。 これは、Windows上のテキストエディタが自動的に '\ r \ n'を最後に付けないためですか?もしそうなら、どうしたらこの問題を解決できますか?
ありがとうございます。
は 'fflushは(標準出力)を試してみてください;'あなたのプログラムの最後に。 –
さて、ファイルをテキストエディタで開き、最後の行に改行を追加することができます。代わりに、lenが0でない場合にループを終了したときにもう一度印刷するという手順があります。 –
ループを終了したくないときにループが終了します。終了条件をあなたが本当に望むものに変更してください。 (EOF *と* len == 0)。 –