• 締切済み

Cでファイルの行数をカウントするには

ファイルの中の行数をカウントするにはどうすればよいか プログラムの行数ならその行数分だけ またコメントや空白行もカウントするにはどうしたらよいか 以下のプログラムに追加したい場合どうしたらよいか教えてください。 #include <stdio.h> int main(int argc , char *argv[]){ char s[256]; int i; FILE *fin; int local; int nCount = 0; for(i = 1 ; i < argc ; i++){ printf("%s\n",argv[i]); local = 0; fin=fopen(argv[i],"r"); memset(s,0,sizeof s); while(fgets(s,sizeof s,fin) != NULL){ // printf("%s",s); local++; nCount++; } memset(s,0,sizeof s); while(fgets) printf("local count = %d\n",local); fclose(fin); } printf("grobal count = %d\n",nCount); return 0; }

みんなの回答

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.1

だいたいあってるようですが…。 [単純な行数カウントについて] ・fopen()でエラーが起こった時の対応が無い ・fgets()は'\0'を付加するためmemset()は不要 ・fgets()が“1行を読みこむ”ことを期待してはいけない fgets()は「第3引数で示した文字数-1」を超える文字数の行については分割して読みこまれるため、行は'\n'の有無で判断するべき('\n'無しでEOFの時は当然1行) ・2つ目のmemset()とwhile(fgets)は意味不明(というかwhile(fgets)は終了しないのでは?) [空行、コメント行について] 仕様が不備で答えられません ・空白行とは何をさすか('\n'のみの行で良いか) ・コメント行とは何を指すか(C/C++のコメントで良いか) ・非コメントとコメントが1行にある場合はどちらにカウントするか(a++ ;/* インクリメント */などの場合) ・文字列定数中に改行が含まれる場合は行と認識するか "a b c" この場合、空行と改行が含まれる 仕様としてはこの程度は明確になっていないとプログラムは作れません。

すると、全ての回答が全文表示されます。

関連するQ&A