###前提・実現したいこと
【c言語】
入力したキーワードを、読み込んだテキストファイルの中から総当たり法で探し出すプログラムを作成しています。
■■入力したキーワードが、テキストのどこに位置するのかを表示する機能を、(Ctrl+D)が押されるまで繰り返したいです。
しかし、1回目は正しく表示されますが、2回目からは、1回目の数が表示されてしまいます。
###試したこと
繰り返すためにwhile(scanf("%s",k)!=EOF)
で囲いました。
###読み込むテキストファイル ファイル名(text.txt)
Snow is a challenging natural phenomenon to visually simulate. While the graphics community has previously considered accumulation and rendering of snow, animation of snow dynamics has not been fully addressed.
###正しい例<ターミナル>
ファイル名を入力してください text1.txt キー入力 ファイルtext1.txtの内容 Snow is a challenging natural phenomenon to visually simulate. While the graphics community has previously considered accumulation and rendering of snow, animation of snow dynamics has not been fully addressed. 文字数=215 テキストデータの文字数の表示 キーワードを入力してください Snow /*キー入力*/ キーワード:Snow /*キーワードの表示*/ 位置:0 /*文字列が一致した場所(先頭の添字)*/ キーワードを入力してください fully キーワード:fully /*正しい内容↓*/ 位置:197 キーワードを入力してください /*(Ctrl)+D で終了*/
###表示される(間違い)<ターミナル>
・・・ /*上記と同様*/ ・・・ キーワードを入力してください Snow キーワード:Snow 位置:0 キーワードを入力してください fully キーワード:fully /*間違いの内容↓*/ 位置:0
###コード
#include<stdio.h> #include<stdlib.h> #include<string.h> int main(void) { char filename[21]; FILE *fp; char t[2000]; char k[80]; int n, i, j, found, klen, tlen; n = 0; i = 0; found = 0; printf("ファイル名を入力してください\n"); scanf("%s",filename); if((fp=fopen(filename,"r"))==NULL) { printf("FILE OPEN ERROR\n"); exit(1); } printf("ファイル%sの内容\n",filename); while(fscanf(fp,"%c",&t[n])!=EOF) { printf("%c",t[n]); n++; } tlen = strlen(t); printf("文字数=%d\n",n); printf("キーワードを入力してください\n"); /*******************うまくいかない範囲(ここから)*********************/ while(scanf("%s",k)!=EOF) { klen = strlen(k); printf("キーワード:%s\n",k); while(i+klen-1 < tlen && found !=1 ) { j=0; while(j<klen && t[i+j] == k[j]) j++; if(j == klen) found = 1; else i++; } if(found==1){ printf("位置:%d\n",i); printf("キーワードを入力してください\n"); } else{ printf("見つかりませんでした\n"); printf("キーワードを入力してください\n"); } } /*****************************(ここまで)****************************/ fclose(fp); return 0; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/13 14:58
2021/01/13 17:53