#include <stdio.h>
void in_comment(void);
void echo_quote(int d);
void rcomment(int c);
int main()
{
int c;
while ((c = getchar()) != EOF)
{
rcomment(c);
}
return 0;
}
void rcomment(int c)
{
int d,e;
if (c == '/')
{
if ((d = getchar()) == '*') //寻找/*的存在
in_comment(); //搜寻*/的存在
else if (d == '/') //处理//的情况
{
while ((e=getchar())!='\n')
{
d = e; //依然通过这种方法来消除双斜杠后的内容
}
//putchar(c);rcomment(d);此为课后答案的解法,一开始没看懂,想不通为什么用调用自身,后来明白了
}
else
{
putchar(c); //判断\fdfd*这种情况的出现
putchar(d);
}
}
else if (c == '\''||c=='"') //对单引号'和双引号"的区分和判断
echo_quote(c);
else
putchar(c); //此为正常的字符
}
void in_comment(void)
{
int c, d;
c = getchar();
d = getchar();
while (c != '*' || d != '/') //通过来回交替赋值来消除评论,学习了!
{
c = d;
d = getchar();
}
}
void echo_quote(int c)
{
int d;
putchar(c);
while ((d = getchar()) != c)
{
putchar(d);
if (d == '\\')
putchar(getchar()); //即使评论中出现\反斜杠,依然输出!
}
putchar(d);
}
c语言之消除注释函数的实现——我读《c程序设计语言》
最新推荐文章于 2021-05-19 04:15:17 发布