# include # include # include # include /****************************************************** sample.txt ファイル名 文字列 数字 とすることで、先頭に特定の文字がある行から数行を削除する プログラム。 sample.txt filename.txt TITLE 5 とすれば、filename.txtというファイル内の、「TITLE」で始ま る行から5行を削除する。 *******************************************************/ main(int argc, char *argv[]) { FILE *fin,*fout; char s[1000]; int len; int lnum; int i; if(argc!=4){ printf("引数は3つです。\n"); printf("usage: sample.exe filename mojiretsu n\n"); exit(1); } if((fin=fopen(argv[1],"r"))==NULL){ printf("入力ファイルをオープンできません。\n"); exit(1); } lnum=atoi(argv[3]); if(isdigit(lnum)==0){ /* おそらくここに問題があるのだけれど */ /* ↑こうやったら48以上ならエラーが出ない */ /* if(isdigit(lnum)!=0){ /* /* ↑こうやったら47以下ならエラーが出ない */ printf("第3引数は数字です。\n"); exit(1); } fout=fopen("backup.txt","w"); len=strlen(argv[2]); i=0; while(fgets(s,1000,fin)!=NULL){ if(strncmp(s,argv[2],len)==0){ i++; } else if(i>0 && i=lnum){ fprintf(fout,"%s",s); i=0; } else fprintf(fout,"%s",s); } fclose(fin); fclose(fout); }