行の行数とその行の文章を出力するプログラムを作りたいのですが。
例)homework.cファイルに
#include<stdio.h> int main(void) { printf("hello work"); return 0; }とあって
filename?(これはprintf関数で書かれた質問)
homework.c
検索したい言葉は?(同上)
printf
と入力すると
4:printf("hello work");
と出れば正解です
そして自分が作ったソースコードは
#include<stdio.h> int main(void) { int ch; FILE *fp; char fname[99]; /*検索したいファイル名*/ char word[99]; /*検索したい文字列*/ int i, j, n, s, count; i = 1;/*行数用の数字*/ j = 0;/*j番目の文字列*/ n = 0;/*検索したい文字列が何文字あっているか?*/ s = 0;/*検索したい文字列の文字数*/ count = 0; printf("FILEname?\n"); scanf("%s", fname); printf("検索したい文字は?"); scanf("%s", word); while(1){ /*検索したい文字列は何文字か判定する*/ if(word[j] == '\0')/*ヌル文字があったら測定終了*/ break; s++; j++; } j = 0;/*また1文字目からやり直すためにいったんリセット*/ if((fp = fopen(fname, "r")) == NULL)/*検索したいファイル名は存在しますか?*/ printf("ERROR"); else{ printf("%d:",i);/*最初の行数*/ i++; while((ch = fgetc(fp)) != EOF){ if(count == 0){/*1文字前の判定1文字前が検索したい文字列の中の1文字でないなら検索したい文字列の1文字目からやり直し*/ j = 0; n = 0; } if(ch == word[j])/*検索したい言葉のj番目とおなじもじですか?*/ { n++;/*同じ文字かの正解数を1つあげる*/ count++;/*現在の文字が正解か否かの判定*/ j++;/*検索したい次の文字にチャレンジする*/ } else{ count = 0;/*不合格なので検索したい最初の文字からやり直し*/ } if(ch == '\n'){/*もし改行なら行番号をあげなさい*/ i++; } if(s == n){/*もし検索したい文字数と正解数が一緒ならその行を出力しなさい*/ printf("%d:", i); fputs(ch); j = 0; n = 0; } } fclose(fp); } return 0; }とかいたのですがエラーが出て動きません
エラー内容
fopen.c:7: error: stray ‘\227’ in program
fopen.c:7: error: stray ‘\128’ in program
fopen.c:7: error: stray ‘\128’ in program
fopen.c:52: warning: passing argument 1 of ‘fputs’ makes pointer from integer without a cast
fopen.c:52: error: too few arguments to function ‘fputs’
まずはこのエラーのとりかたを教えてくださいお願いします。
ちなみにいまじぶんが使っているコンパイラはGCCで
技術レベルはfopen関数が使えるぐらいです
