0

input.c ファイルから 1 行および複数行のコメントを正常に削除しましたが、input.c ファイルにコメントがあった場所に、output.c ファイルに空の行が作成されています。それらを削除するには?

#include<stdio.h>
int main()
{
  FILE *f1,*f2;
  char c;
  int i=0;
  f1=fopen("input.c","r");
  f2=fopen("output.c","w");

  while((c=getc(f1))!=EOF)
   {
       if(c=='/')
         {
            if((c=getc(f1))=='*' )
              {
                  do
                    {
                    c=getc(f1);
                    }while(c!='*');

                  c=getc(f1);
                  if(c=='/')
                  c=getc(f1);
              }
            else
             {
                 if(c=='/')
                  {
                       do
                       {
                       c=getc(f1);
                       }while(c!=10);
                  }
             }
         }
     fseek(f2,1,i++);
     putc(c,f2);
   }
fclose(f1);
fclose(f2);
return 0;
}
4

1 に答える 1

1
c=getc(f1);
if(c=='/')
c=getc(f1);

ここで行う:

if (c=='\n')
  c=getc(f1); /* that will read next char from input, when last red char is '\n' */

最後の行は、'/' で終わる次の文字を読み取ります。'\n' でない場合にのみ、c を出力ファイルに入れる必要があります。

こっちも一緒:

do
{
c=getc(f1);
}while(c!=10);

ここでは常に次のことを行います。

c=getc(f1);

ループの実行を停止するには、c 変数に含まれている必要がある '\n' を削除します。

これは、実際に動作するように見える必要があります。

#include<stdio.h>
int main()
{
  FILE *f1,*f2;
  char c;
  f1=fopen("fahr.c","r");
  f2=fopen("output.c","w");

  while((c=getc(f1))!=EOF)
   {
       if(c=='/')
         {
            if((c=getc(f1))=='*' )
              {
                  do
                    {
                    c=getc(f1);
                    }while(c!='*');

                  c=getc(f1);
                  if(c=='/')
            c=getc(f1);
          if(c=='\n')
            c=getc(f1);
              }
            else
             {
                 if(c=='/')
                  {
                       do
                       {
                       c=getc(f1);
                       }while(c!=10);
               c=getc(f1);
                  }
             }
         }
     putc(c,f2);
   }
fclose(f1);
fclose(f2);
return 0;
}
于 2013-08-19T10:56:26.280 に答える