• ベストアンサー

関数でファイルハンドルを読み込む

このソースファイル'pro1-1.cと名前をつけています)の中の改行を数えるプログラムを作成しています。 main関数でファイルを開き、County関数で数をカウントし、Countx関数で改行の数を表示させる感じで作成しているのですが、County関数での数のカウントの部分で引っかかっています。 途中までできているソースは以下の通りです。 #include <stdio.h> int count[95]={0}; void Countx(void){ int x; for(x=0;x<=95;x++){ if(count[x]!=0){ printf("'%c': %d\n",x+32,count[x]); } } } void County(FILE *fh){ int c; int i; for(c=0;c<=2000;c++){ if(count[c]<32 || count[c]>126){ printf("文字コードエラー\n"); break; while((i=getc(fh))!=EOF){ if(c=='\n'){ count[fh[c]-32]++; } } } } } int main(void){ FILE* fh; if((input=fopen("pro1-1.c","r"))==NULL){ fprintf(stderr,"ファイルが開けません\n"); return 1; } County(fh); Countx(); fclose(fh); return 0; } イメージとしては "\n":○ ←改行の数が入る と言った表示を目指しています。 どなたか正しい解決方法を教えていただけないでしょうか、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yamada404
  • ベストアンサー率56% (9/16)
回答No.2

if(count[c]<32 || count[c]>126) の判定で true の場合に break して処理を抜けていますが。 その後にカウントを行う処理を入れているからカウントされないのでは

hointo
質問者

お礼

お礼を間違えてつけ損ねたので、つけさせていただきます。 失礼しました。

hointo
質問者

補足

ありがとうございました。 ご指摘の通り、for文に入っていたため、処理が回避されていたようです。自分のケアレスミスでした・・・。

その他の回答 (1)

  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.1

>正しい解決方法を教えていただけないでしょうか デバッガで処理の順に変数の内容を確認して、 どこで自分が期待する結果と異なるかを確かめて下さい。

hointo
質問者

お礼

ひとつひとつ確認をしてみました。for文にWhile文が入っていたため、処理がまったく行われていたなったようです。 ご指摘、ありがとうございました。

関連するQ&A