编写一个C程序删除一个文件的所有注释

来源:互联网 发布:鸿威软件 编辑:程序博客网 时间:2024/05/20 11:46
//删除一个文件的注释#include<stdio.h>#include<stdlib.h>void delCom();int main(){  delCom();  return 0;}void delCom(){  FILE *pfr;  FILE *pfw;  char t1;  char t2;  pfr = fopen("a.c","rb");  pfw = fopen("b.c","wb");  while(  fread(&t1, 1, 1, pfr)  )    {      if(t1 == '/' ){  fread(&t2, 1, 1, pfr);  if(t2 == '/')                 //读到了 '//'注释     {      while( fread(&t2, 1, 1, pfr) ){  if(t2 == '\n')               //读到换行符为止    {      break;    }}      fwrite(&t2, 1, 1, pfw);        //写入换行符,防止改变格式    }  else if(t2 == '*')                  // 读到了/*注释    {      while( fread( &t2, 1, 1, pfr) ){  if(t2 == '*')           //没读到*就一直向后读    {      fread(&t2, 1, 1, pfr);      if( t2 == '/')      //读到了*/{  break;}      else           //这句话是为了防止结尾的地方有两个*连在一起{  fseek( pfr, -1, SEEK_CUR);     //如果*后面不是/,就把指针向后移动一位继续寻找*}    }}    }  else    {      fwrite(&t1, 1, 1, pfw);   //如果只读到一个'/'就把上两个读过的都写入      fwrite(&t2, 1, 1, pfw);    }}      else if(t1 == '\"')    //“” 里面的所有内容都写进去{  fwrite( &t1, 1, 1, pfw);  while( fread( &t1, 1, 1, pfr) )    {      fwrite( &t1, 1, 1, pfw);      if(t1 == '\"'){  break;}    }}      else{  fwrite(&t1, 1, 1, pfw);   // 如果读不到'/'就一直写}    }  fclose(pfr);  fclose(pfr);}

说实话这个程序费了我不少脑筋,其实很早就写好了,但是对于程序中有这种注释“ /************/ ”的就无力了,究其原因就是对于后面三个**/结尾,看到了有*以后,又看到一个*,再循环,就读不到‘*’了,于是乎修改了一下,找个一个库函数fseek,可以调整文件指针的位置,问题就好办了,只要看到有一个' * '后面不是'/'的就把文件指针向前移动一位,这样,不管多复杂的注释就都能消掉了


0 0