计算循环的深度

时间:2014-02-17 11:35:07

标签: c

我不确定这个问题是否适合SO。如果不是,我会删除。

我必须检查一些KLOC的代码。作为其中的一部分,我必须找出循环的深度和条件检查。 [请参阅下面的例子]

如果超过五个意味着我需要记下来。

我的问题是“有什么工具可以帮我吗?”我确实搜索了谷歌,但没有得到答案。

Ex 1:for {} //阻止深度1

Ex 2:for { if () {} } //阻止深度2

例3:for () { for () { if() {} } } //阻挡深度3

1 个答案:

答案 0 :(得分:2)

简单计算的程序

//>prog file
//>prog file max_depth

#include <stdio.h>
#include <stdlib.h>

#define DEPTH_MAX 5 //no count top level

int main(int argc, char *argv[]) {
    FILE *fp;
    int depth_max = DEPTH_MAX;
    if(argc > 1){
        if(NULL==(fp = fopen(argv[1], "r"))){
            perror("fopen");
            exit( EXIT_FAILURE);
        }
    } else {
        fp = stdin;
    }
    if(argc == 3)
        depth_max = atoi(argv[2]);
    int ch, level = 0;
    size_t line_no = 1;
    while(EOF!=(ch=fgetc(fp))){
        if(ch == '\n'){
            ++line_no;
        } else if(ch == '{'){
            if(++level > depth_max)
                printf("found at number of line : %zu\n", line_no);
        } else if(ch == '}'){
            --level;
        }
    }
    exit(EXIT_SUCCESS);
    return 0;
}