コンパイラ GCC
技術レベル fopenが使える程度。
前回の投稿で(URL http://www.play21.jp/board/formz.cgi?ac ... &rln=45491)
(課題はカレントディレクトリ内にある.cファイルのすべてを対象にしてその次に検索したい言葉を入力して
ファイル名と検索したい言葉がある行の文章そしてその行の行数を出力するプログラムを作りなさい。 )
解決しましたといっときながらなんですが・・・
以下のようにプログラムを組んだのですが
#include<stdio.h>
#include<stdlib.h>
int main(void){
FILE *fp;/*検索対象になるファイル*/
FILE *fl;/*filelist用*/
int ch;/*putchar用*/
int che;/*putchar用(filelist用の)*/
int h, i, j, k, n, s;
int count;/*文字の判定*/
int count2;/*行の文字数*/
int count3;/*forループ用*/
int flag;/*判定*/
char fname[1024];/*検索したいファイル名*/
char word[1024];/*検索したい文字列*/
char string[1024];/*文字を格納する場所*/
h = 0;/*ファイル名用*/
i = 0;/*行数用の数字*/
j = 0;/*j番目の文字列*/
n = 0;/*検索したい文字列が今何文字あってるか?*/
s = 0;/*検索したい文字数*/
count = 0;
system("ls *.c > filelist");
printf("検索したい文字は?");
scanf("%s", word);
while(1){
if(word[j] == '\0')
break;
s++;
j++;
}
j = 0;
if((fl = fopen("filelist", "r")) == NULL)/*filelistが存在しているかチェックする*/
printf("ERROR\n");
else{
while((che = fgetc(fl)) != EOF){
if(che == '\n' || che == EOF){
/*filelist内の改行もしくはEOFがあった場合fname内の文字データと同じファイル名のファイルを開く*/
fname[h] = '\0';
printf("%s\n", fname);
h = 0;
i = 0;
j = 0;
n = 0;
s = 0;
count = 0;
count2 = 0;
count3 = 0;
if((fp = fopen(fname, "r")) == NULL)/*fname内の文字データと同じファイル名が存在するかチェックする*/
printf("ERROR2\n");
else{
i++;/*最初の行数*/
while((ch = fgetc(fp)) != EOF){
string[count2] = ch;
count2++;
if(count == 0)/*1文字前の判定1文字前が検索したい文字列の中の1文字でないなら検索したい文字列の1文字目からやり直し*/
{
j = 0;
n = 0;
}
if(ch == '\n')/*もし改行なら行番号をあげなさい*/
{
i++;
string[count2] = '\0';
if(flag == 1){
count3 = 0;/*forループに使用*/
for(;count3 < count2 + 1; count3++)
printf("%c", string[count3]);
}
count2 = 0;
flag = 0;
}
}
fclose(fp);
}
}
fname[h] = che;
h++;
}
}
fclose(fl);
return 0;
}
エラーが出ないはいいのですが上のソースを実行すると検索したい文字は?printf
2-11.c
2-7.c
ERROR2
3-11.c
ERROR2
3-11a.c
ERROR2
3-14.c
ERROR2
3-15.c
ERROR2
3-16.c
ERROR2
3-18.c
ERROR2
4-13.c
ERROR2
az.c
ERROR2
bubble.c
ERROR2
copy.c
ERROR2
ennsyuu3-1.c
ERROR2
exlexico.c
ERROR2
file.c
ERROR2
fopen.c
ERROR2
fopen2.c
ERROR2
fopen3.c
ERROR2
fscanf.c
ERROR2
ifbun.c
ERROR2
kouzoutai.c
ERROR2
list13-10.c
ERROR2
list13-6.c
ERROR2
list13-9.c
ERROR2
search.c
ERROR2
switch.c
ERROR2
switch2.c
ERROR2
syukudai.c
ERROR2
test.c
ERROR2
time.c
ERROR2
と出てしまいます(最初の.cファイルだけなぜかエラーが出ませんが)
カレントディレクトリ内のファイル名はきちんと出ているので
ファイル名を検索するとき多分文字のデータとして扱われてないんじゃないかと思われるのですが。
(if((fp = fopen(fname, "r")) == NULL)/*fname内の文字データと同じファイル名が存在するかチェックする*/
printf("ERROR2\n"); のとき)
最初にERROR2と表示されずきちんと表示されているファイル名のファイル内の検索をする対処法をお願いします。
