Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何计算“的数量”//&引用;用C注释的行?_C - Fatal编程技术网

如何计算“的数量”//&引用;用C注释的行?

如何计算“的数量”//&引用;用C注释的行?,c,C,我试图计算文件中的“/”注释行数,而不是注释总数。 我尝试使用strstr()函数检查字符串“/”是否在字符串行中,但它正在计算每一行 case(3) : while (fgets(line, 300, q)){ if (strstr(line, "//") == NULL) CommentedRows++; } 我还尝试使用strhr()查找第一个出现的“/”符号,然后检查下一个符号是否为“/”,但结果总是0?来自: 这些函数返回指向子字符串开头的指针,如果找不

我试图计算文件中的“/”注释行数,而不是注释总数。 我尝试使用strstr()函数检查字符串“/”是否在字符串行中,但它正在计算每一行

case(3) :

    while (fgets(line, 300, q)){

    if (strstr(line, "//") == NULL) CommentedRows++;

    }
我还尝试使用strhr()查找第一个出现的“/”符号,然后检查下一个符号是否为“/”,但结果总是0?

来自:

这些函数返回指向子字符串开头的指针,如果找不到子字符串,则返回NULL

所以你应该这么做

if (strstr(line, "//") != NULL) 
{
  CommentedRows++;
}
甚至更短

if (strstr(line, "//")) 
{
  CommentedRows++;
}
但是,这只是告诉您,
包含C-“string”
“//”
的某个地方,但这是否被解释为C++/C99注释则是另一回事。

来自:

这些函数返回指向子字符串开头的指针,如果找不到子字符串,则返回NULL

所以你应该这么做

if (strstr(line, "//") != NULL) 
{
  CommentedRows++;
}
甚至更短

if (strstr(line, "//")) 
{
  CommentedRows++;
}

然而,这只是告诉你,
包含C-“string”
“//”
的某个地方,不管这是否被解释为C++/C99注释是另一回事。

仅仅因为一行上有//并不意味着它有注释,因为//可能是字符串的一部分,另一条注释的一部分,甚至是xmldoc注释的一部分

假设要计算“完全注释”的行数,即它们以注释开头,前面可能有可选的空格字符,那么这可能是一个解决方案:

bool IsFullyCommentedLine(char*line)
{
//对于行中的每个字符
对于(int i=0;行[i]!=0;i++)
{
char c=行[i];
如果/是另一个,我们认为
//要完全注释的行
如果(c=='/'&&line[i+1]=='/')
{
返回true;
}
//如果我们找到除了空白以外的任何东西,
我们认为这条线不能完全注释。
如果(c!=''&&c!='\t'),则为else
{
打破
}
//只要我们到了这里,就有空白
//这条线的开始,所以我们继续寻找。。。
}
返回false;
}
int CountFullyCommentedLines(文件*FILE)
{
字符缓冲区[1024];
int-commentCount=0;
而(char*line=fgets(缓冲区,1024,文件))
{
如果(IsFullyCommentedLine(行))
commentCount++;
}
返回注释计数;
}
int main(int argc,char*argv[])
{
如果(argc==2)
{
FILE*FILE=fopen(argv[1],“r”);
printf(“完全注释的行数,即以可选空格/制表符和//:\r\n开头的行数”);
printf(“%i\r\n”,countfullycommentedline(文件));
fclose(文件);
}
返回0;
}

再一次,假设您不想对在中间行开始的注释进行计数,只是注释整个行的注释。

只是因为一行有/不意味着有注释,因为/可能是字符串的一部分,是另一注释的一部分,甚至是XMLDOC注释的一部分。 假设要计算“完全注释”的行数,即它们以注释开头,前面可能有可选的空格字符,那么这可能是一个解决方案:

bool IsFullyCommentedLine(char*line)
{
//对于行中的每个字符
对于(int i=0;行[i]!=0;i++)
{
char c=行[i];
如果/是另一个,我们认为
//要完全注释的行
如果(c=='/'&&line[i+1]=='/')
{
返回true;
}
//如果我们找到除了空白以外的任何东西,
我们认为这条线不能完全注释。
否则,如果(c!=“&&c!=”\t')
{
打破
}
//只要我们到了这里,就有空白
//这条线的开始,所以我们继续寻找。。。
}
返回false;
}
int CountFullyCommentedLines(文件*FILE)
{
字符缓冲区[1024];
int-commentCount=0;
而(char*line=fgets(缓冲区,1024,文件))
{
如果(IsFullyCommentedLine(行))
commentCount++;
}
返回注释计数;
}
int main(int argc,char*argv[])
{
如果(argc==2)
{
FILE*FILE=fopen(argv[1],“r”);
printf(“完全注释的行数,即以可选空格/制表符和//:\r\n开头的行数”);
printf(“%i\r\n”,countfullycommentedline(文件));
fclose(文件);
}
返回0;
}

再次,假设你不想计算在中间行开始的注释,只是注释整个行的注释。

你是指<代码>如果(STRSTR(行,//))被引用行++,<代码>??仅供参考——您的代码也将匹配
printf(“/”)
不确定这是否是您的问题。
if(strstrstr(line,“/”)!=NULL)
这就是我认为应该是的代码。我认为如果==NULL,则找到匹配项?使用所有警告和调试信息编译(
gcc-Wall-Wextra-g
)。然后使用调试器(
gdb
)。也许虫子在别处!你的意思是
if(strstrstr(行“/”)CommentedRows++??仅供参考——您的代码也将匹配
printf(“/”)
不确定这是否是您的问题。
if(strstrstr(line,“/”)!=NULL)
这就是我认为应该是的代码。我认为如果==NULL,则找到匹配项?使用所有警告和调试信息编译(
gcc-Wall-Wextra-g
)。然后使用调试器(
gdb
)。也许虫子在别处!先生,我想应该检查一下,这两个字符必须是前两个字符s@Gopi:
/
可以开始注释,即使它们不是第一个字符,例如,类似于此行<代码>标准::cout if(strstrstr(行“/”){CommentedRows++;}结果0 evrytime@BasileStarynkevitch是的,我的意思是这不会给出正确的评论数量。OP的代码中必须有一些指导原则,说明评论应该在