編寫一個刪除C語言程式中所有註釋語句的程式
阿新 • • 發佈:2019-01-26
#include <stdio.h>
void rcomment (int c);
void in_comment_one (void); //該函式用於處理/*及*/的註釋符
void in_comment_two (void); //該函式用於處理//的單行註釋符
void echo_quote (int c);
int main(void)
{
int c;
while ((c = getchar()) != EOF)
rcomment(c);
return 0;
}
void rcomment (int c)
{
int d;
if (c == '/')
if ((d = getchar()) == '*')
in_comment_one();
else if (d == '/')
{
in_comment_two();
}
else
{
putchar(c);
putchar(d);
}
else if (c == '\'' || c == '"') //處理''或""中包含的字元或字串
echo_quote (c);
else
putchar (c);
}
void in_comment_one (void)
{
int c, d;
c = getchar();
d = getchar();
while (c != '*' || d != '/') /* 一直找到註釋結尾 */
{
c = d;
d = getchar();
}
}
void in_comment_two (void)
{
int c;
c = getchar();
while (c != '\n') /* 一直找到註釋結尾 */
{
c = getchar();
}
ungetc(c, stdin); //讀到的換行符返回到緩衝區當中
}
void echo_quote (int c)
{
int d;
putchar (c);
while ((d = getchar()) != c)
{
putchar (d);
if (d == '\\') //避免把跟在反斜槓後面的引號看做是結束引號,直接將其輸出
putchar (getchar());
}
putchar (d);
}