首页 > 代码库 > c语言删除注释

c语言删除注释

搬运自k&r习题解答:
/*
 * delete comment in C
 */
#include<stdio.h>

#define normal 0

void rcomment(int c);
void in_comment(void);
void echo_quote(int c);

main()
{
	int c;
	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);
	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);
}


书中答案rcomment函数中的

else if (d == ‘/‘) {
			putchar(c);
			rcomment(d);
		} 
这个语句看了好久没没明白什么意思,测试程序的话,不处理‘//‘注释,只删除/*  */之间的,不敢确定是不是答案有问题。 

估计这是原本应该删除//到换行之间的注释的,若是这样,这个语句应改为:

else if (d == ‘/‘) {
			while(getchar()!=‘\n‘);
		} 



c语言删除注释