问题及代码:
/*删除C语言程序中所有的注释语句*/
#include<stdio.h>
void rcomment(int c);
void in_comment(void);
void echo_quote(int c);
/*从有效(valid)的C语言中移除所有的注释(comment)*/
int main()
{
int c,d;
while((c=getchar())!=EOF)
rcomment(c);
return 0;
}
/*读取每个字符,移除注释,
搜索注释语句的起始位置*/
void rcomment(int c)
{
int d;
if(c=='/')
if((d=getchar())=='*')
in_comment(); //调用结束注释语句 ,确保注释语句都被删除
else if(d=='/')
{
putchar(c);
rcomment(d);
}
else
{
putchar(c);
putchar(d);
}
else if (c=='\''||c=='"')
echo_quote(c); //哪里错了 ,返回1退出状态?
else
putchar(c);
}
/*有效注释内*/
void in_comment(void)
{
int c,d;
c=getchar();
d=getchar();
while(c!='"'||d!='/')
{
c=d;
d=getchar();
}
}
/*每个字符被引用,
指明找到的字符是一个单引号或双引号,
确保引号中内容原样输出*/
void each_quote(int c)
{
int d;
putchar(c);
while((d=getchar())!=c)
{
putchar(d);
if(d=='\\')
putchar(getchar());
}
putchar(d); //程序将在getchar返回文件结束符时结束运行
}