搬运自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‘); }
时间: 2024-10-14 04:35:03