2 u011046042 u011046042 于 2014.12.08 09:21 提问

如何在工程目录下读取.c的源文件

如何在工程目录下读取.c的源文件 然后分析文件中是否有“/* ”“//”

7个回答

caozhy
caozhy   Ds   Rxr 2014.12.08 15:07
已采纳

#include

int main()

{

FILE *fp,*fp1; 

char str[99]=""; 

int i=0; 

fp=fopen("test.c","r"); //要打开的源文件 

fp1=fopen("new.c","w"); //另存为 

while(fgets(str,99,fp)!=NULL) 

{ 

    for(i=0;i<99;i++) 

    if(str[i]=='/'&&str[i-1]=='/'){str[i-1]='\n';str[i]='\0';break;} 

    fputs(str,fp1); 

} 

fcloseall(); 

return 0; 

}

如果有/* */块注释的话,用这个

#include

#include

int main()

{

FILE *fp,*fp1; 

char str[99]="",str1[99]=""; 

int i,j,no=0; 

fp=fopen("test.c","r"); //要打开的源文件 

fp1=fopen("new.c","w"); //另存为 

while(fgets(str,99,fp)!=NULL) 

{ 

    for(i=0;i<99;i++) 

    { 

        if(str[i]=='/'&&str[i-1]=='/') 

        {str[i-1]='\n';str[i]='\0';} 



        if(str[i]=='*'&&str[i-1]=='/') 

        {str[i-1]='\0';no=1;fputs(str,fp1);} 



        if(str[i]=='/'&&str[i-1]=='*') 

        { 

            for(j=0;j<98-i;j++){str[j]=str[i+j+1];} 

            str[j]='\0'; 

            no=0; 

        } 

    } 

    if(no==0)fputs(str,fp1); 

} 

fcloseall(); 

return 0; 

}

caozhy
caozhy 回复u011046042: 一个标志,判断当前是否在注释内
接近 3 年之前 回复
u011046042
u011046042 话说这个no是什么意思 求大神指导一下
接近 3 年之前 回复
u014766078
u014766078   2014.12.08 15:17

找到源文件路径进行读取就行了,,然后在读取时判断是否有这些字符没有就可以了,可以设置一个变量,初值为0,有就置1,没有就0,就可以了,也可以用变量来统计他们出现的次数,如果结果为0,就没有,大于0就有这些字符呗

91program
91program   Ds   Rxr 2014.12.08 09:53

.c 源文件,是以文件的形式存在的。工程所在目录知道不?如果知道,直接按文件进行读取就行了。

不知道你的具体问题在哪里!

u011046042
u011046042 读取一个.C文件,删除该文件中所有的注释语句。然后写入到新的.C文件里。 要求: 删除注释语句功能采用动态链接库形式
接近 3 年之前 回复
eagleyan
eagleyan   Rxr 2014.12.08 09:55
Prolovecui
Prolovecui   2014.12.08 11:42

这个.C文件应该是以文本的方式保存的,可以直接读取的,分析文件可以用正则等方式。

u011046042
u011046042   2014.12.08 15:58
  1. 读取一个.C文件,删除该文件中所有的注释语句。然后写入到新的.C文件里。 要求:
  2. 删除注释语句功能采用动态链接库形式
u011046042
u011046042   2014.12.08 16:18

#include
int main()
{
FILE *fp;
char buf[100000],ch,flag2;
int i,flag1=0;
if((fp=fopen("带?注痢?释酣?文?件t.c","r"))==NULL)

{
printf("can't open file");
exit(1);
}
buf[0]=fgetc(fp);

i=1;

    while((ch=fgetc(fp))!=EOF)
   {   
           buf[i]=ch;
           if(buf[i-1]=='/'&&ch=='*')      
          {
                  flag1=1;         
                  i--;                   
          }
          if(flag2=='*'&&ch=='/')
          {
                flag1=0;
                i--;
          }
          if(buf[i-1]=='/'&&ch=='/')      
          {
                  flag1=1;         -
                  i--;                   
          }
          if(flag2=='/'&&ch=='n')
          {
                flag1=0;
                i--;
          }
    flag2=buf[i];      
    if(flag1==0)       
          i++;
  }


  buf[i]='\0';         
  fclose(fp);
  if((fp=fopen("带?注痢?释酣?文?件t.c","w+"))==NULL)
  {
        printf("can't open file");
        exit(1);
  }
  fputs(buf,fp);
  fclose(fp);
  return 0;

}

Csdn user default icon
上传中...
上传图片
插入图片