我已经成功删除了input.c文件中的单行和多行注释,但是在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;
}
答案 0 :(得分: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);
删除'\ n',它必须是c变量才能停止循环执行。
这实际上应该是这样的。
#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;
}