C言語 複数ファイル操作について
Cプログラミング初心者です。
論文などの何行も文章があるようなテキストファイル(ここでは1.txtとします)と、他に予め単語をいくつか登録しているテキストファイル(2.txt)を開き、1.txtを最初の行から一行ごとに読み込み、2.txtの中にある単語が1つでもその一行の文章中に含まれていたらその一行の文章を出力し、また次の行においても2.txtの中にある単語のいずれかが含まれているかどうかを調べて含まれている場合は出力…含まれていない場合は出力せずに次の行へ…といったようにこれを1.txt内の最後の行まで繰り返し行うプログラムを作りたいのですが、自分が作ったプログラムでは含む・含まない関係なく1.txt内の文章全てが出力されてしまいます。おそらく最初のwhile文あたりがおかしいのだろうという予想はつくのですがどのように直せばよいのかわからず悩んでいます。どなたか教えていただければ嬉しいです(;_:)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 1056
void delkaigyo(char *s1,char *s2){
char *p = s1;
p=strstr(s1,s2);
if(p!=NULL){
strcpy(p,p+strlen(s2));
delkaigyo(p+1,s2);
}
}
int main(void){
FILE *fp;
char *filename = "2.txt";
char str1[N];
char str2[N];
char kaigyo[] = "\n";
int i;
int a=0;
char fname[64];
printf("file:");
scanf("%s", fname); ←ここで1.txtを入力するとします
fp = fopen(fname, "r");
while(fgets(str1, N, fp) != NULL){
delkaigyo(str1, kaigyo);
memset(str1, 0, N);
fread(str1, 1, N-1, fp);
if((fp = fopen(filename, "r")) == NULL){
fprintf(stderr, "%serror.\n", filename);
exit(EXIT_FAILURE);
}
while(fgets(str2, N, fp) != NULL){
delkaigyo(str2,kaigyo);
if(strstr(str1,str2)!=NULL){
a = 1;
printf("%s\n", str1);
break;
}
}
if(a==0){
return 0;
}
fclose(fp);
}
return EXIT_SUCCESS;
}
お礼
御回答ありがとうございます。 確かに、ご提案頂いた方法で、今回のプログラムはきちんと動作します。 ですが、今回例に出したプログラムは、あくまで例であって、 P1とP2の実行ファイルを、[Ctrl]+[F5]で、 順番に実行できるように設定したかったんです。