将C语言源程序(hello.c)文件中所有注释删除后,存入另外一个文件(new_hello.c)
2个回答
展开全部
//将写好的hello.c放入工程目录
#include<stdio.h>
main()
{
FILE *q,*p; //声明两个文件指针
char a[1000],c;//数组a,字符c
int i,end;//i用于计数,end用于标记是否读到文件末尾
p=fopen("hello.c","r");//读方式打开p
q=fopen("new_hello.c","w");//写方式打开q
while((fgets(a,999,p))!=NULL)//读取一行存入a,循环直至文件末尾
{
end=0;//末尾标记置为0
for(i=0;a[i]!='\0';i++)//循环a中元素,直至字符串尾
{
if(a[i]!='/')fprintf(q,"%c",a[i]);//如果a[i]不是'/'就直接输出到q中(也就是new_hello.c)
else//a[i]是'/'的情况
{
if(a[i+1]=='/')break;//如果下一个字符也是'/',说明出现了'//'随后都是注释,直接break读下一行
else if(a[i+1]=='*')//如果下一个是'*',是长注释
{
c=fgetc(p);//读下一个字符
while(c!=EOF)//防止意外,检查c是否到文件末尾
{
if(c=='*')//如果c是*
{
c=fgetc(p);//再读一个字符
if(c=='/')break;//如果是'/'说明到了注释的末尾,跳出
if(c==EOF)break;//如果是EOF,说明到了文件末尾,跳出
fprintf(q,"*%c",c);//都不是,输出*和又读的字符c
}
c=fgetc(p);//读下一字符
}
if(c=='/')//如果因为读到'/'而跳出上面的循环,说明经过的是注释
{
if((fgets(a,999,p))==NULL)//从此处再读一行,if内的语句总会执行
{
//fgets返回NULL说明到了文件尾
end=1;//结尾标志置1
break;//跳出
}
i=-1;//未到文件尾,i置-1,因为a重读了一行,在for循环中,保证下次从0开始
}
if(c==EOF)//如果因为读到EOF而跳出循环,说明不正常的读到了文件尾
{
end=1;//结尾标志置1
break;//跳出
}
}
else fprintf(q,"%c",a[i]);//正常情况,即'/'后不是'*'或'/',不是注释,输出
}
}
if(end==1)break;//结尾标志为1时,跳出循环
}
}
#include<stdio.h>
main()
{
FILE *q,*p; //声明两个文件指针
char a[1000],c;//数组a,字符c
int i,end;//i用于计数,end用于标记是否读到文件末尾
p=fopen("hello.c","r");//读方式打开p
q=fopen("new_hello.c","w");//写方式打开q
while((fgets(a,999,p))!=NULL)//读取一行存入a,循环直至文件末尾
{
end=0;//末尾标记置为0
for(i=0;a[i]!='\0';i++)//循环a中元素,直至字符串尾
{
if(a[i]!='/')fprintf(q,"%c",a[i]);//如果a[i]不是'/'就直接输出到q中(也就是new_hello.c)
else//a[i]是'/'的情况
{
if(a[i+1]=='/')break;//如果下一个字符也是'/',说明出现了'//'随后都是注释,直接break读下一行
else if(a[i+1]=='*')//如果下一个是'*',是长注释
{
c=fgetc(p);//读下一个字符
while(c!=EOF)//防止意外,检查c是否到文件末尾
{
if(c=='*')//如果c是*
{
c=fgetc(p);//再读一个字符
if(c=='/')break;//如果是'/'说明到了注释的末尾,跳出
if(c==EOF)break;//如果是EOF,说明到了文件末尾,跳出
fprintf(q,"*%c",c);//都不是,输出*和又读的字符c
}
c=fgetc(p);//读下一字符
}
if(c=='/')//如果因为读到'/'而跳出上面的循环,说明经过的是注释
{
if((fgets(a,999,p))==NULL)//从此处再读一行,if内的语句总会执行
{
//fgets返回NULL说明到了文件尾
end=1;//结尾标志置1
break;//跳出
}
i=-1;//未到文件尾,i置-1,因为a重读了一行,在for循环中,保证下次从0开始
}
if(c==EOF)//如果因为读到EOF而跳出循环,说明不正常的读到了文件尾
{
end=1;//结尾标志置1
break;//跳出
}
}
else fprintf(q,"%c",a[i]);//正常情况,即'/'后不是'*'或'/',不是注释,输出
}
}
if(end==1)break;//结尾标志为1时,跳出循环
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询