统计 c语言注释 数目,用C语言统计程序里的注释行

匿名用户

1级

2007-07-21 回答

你这个实现太简单了,不够的

想了一会儿,不行,绝对不是三言两语说得清楚的,就你这段代码来说,需要考虑以下几点:

1. 基于文件操作绝对太慢,应该读入内存操作;

2. fgetc读一个字符就会自动后移文件指针,不用fseek;

3. /* */这样一对才是一个注释,不是说找到一个/*就算一个注释了;

4. //的控制范围为当前行;

5. /* */的控制范围是没有限定的,可以是多行;

6. 嵌套问题:

A. 如果当前行内/*或//出现在//之后,应该不认为是注释

B. 如果//出现在一对/**/的范围内,应该不认为是注释

C. /**/内部再存在/**/怎么对待?

7. 换行问题。如果符号//,/*,*/被\分割在不同的行内怎么办?

恐怖了~~~~~

给你从CSDN找了一段代码,我没试过,希望有用。

/*统计c中代码行和注释行的数量*/

#include

struct fun{

int zhushi;

int hangshu;

int flagzhushi;

int *flagzhw;

}a;

struct fun *p=&a;

void recomment(int c,struct fun *p);

void in_comment(struct fun *p);

void echo_quote(int c);

main()

{

int c;

while( (c=getchar())!=EOF )

recomment(c,p);

printf("%d,%d\n",p->zhushi,p->hangshu);

return 0;

} /*主函数完成*/

void recomment(int c,struct fun *p)

{

int d;

if (c == '/'){

if ( (d=getchar()) =='*' )

in_comment(p);/* 进入注释处理函数*/

else if ( d == '/' )

recomment(d,p); /*递归*/

}

else if ( c == '\'' || c == '"' )

echo_quote(c); /* 在引号内的注释不算*/

else if ( c == '\n'){ /* 对回车的处理(考虑了各种情况)*/

if(p->flagzhushi == 1 ) /*此行有注释*/

++ (p->zhushi);

if ( p->flagzhw==1 )

++ (p->hangshu);

p->flagzhw=p->flagzhushi=0;

}else if ( p->flagzhw == 0 && c !=' ' )

p->flagzhw=1;

} /*完成*/

void in_comment(struct fun *p)

{

int c,d;

c=getchar();

d=getchar();

while ( c != '*' || d != '/' ){

if ( c == '\n' ){

++ (p->zhushi);

if ( p->flagzhw == 1 )

++ (p->hangshu);

}

c=d;

d=getchar();

}

p->flagzhushi=1;

} /* 完成*/

void echo_quote(int c)

{

int d;

while ( (d=getchar()) !=c )

if ( d=='\\')

getchar(); /*忽略转义字符*/

} /*完成*/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值