プロが教える店舗&オフィスのセキュリティ対策術

ファイルの中の行数をカウントするにはどうすればよいか
プログラムの行数ならその行数分だけ
またコメントや空白行もカウントするにはどうしたらよいか
以下のプログラムに追加したい場合どうしたらよいか教えてください。

#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;
}

A 回答 (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"
この場合、空行と改行が含まれる

仕様としてはこの程度は明確になっていないとプログラムは作れません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!