The number of characters of comments in a file (C programming)

前端 未结 3 1049
太阳男子
太阳男子 2021-01-25 11:52

I can\'t seem to get it right, tried everything, but..

int commentChars() {
char str[256], fileName[256];
FILE *fp;
int i;


do{
    long commentCount=0;
    ffl         


        
3条回答
  •  醉酒成梦
    2021-01-25 12:44

    #include 
    
    size_t counter(FILE *fp){
        int ch, chn;
        size_t count = 0;
        enum { none, in_line_comment, in_range_comment, in_string, in_char_constant } status;
    #if 0
        in_range_comment : /* this */
        in_line_comment  : //this
        in_string : "this"
        in_char_constnt : ' '
    #endif
    
        status = none;
        while(EOF!=(ch=fgetc(fp))){
            switch(status){
            case in_line_comment :
                if(ch == '\n'){
                    status = none;
                }
                ++count;
                continue;
            case in_range_comment :
                if(ch == '*'){
                    chn = fgetc(fp);
                    if(chn == '/'){
                        status  = none;
                        continue;
                    }
                    ungetc(chn, fp);
                }
                ++count;
                continue;
            case in_string :
                if(ch == '\\'){
                    chn = fgetc(fp);
                    if(chn == '"'){
                        continue;
                    }
                    ungetc(chn, fp);
                } else {
                    if(ch == '"')
                        status = none;
                }
                continue;
            case in_char_constant :
                if(ch == '\\'){
                    chn = fgetc(fp);
                    if(chn == '\''){
                        continue;
                    }
                    ungetc(chn, fp);
                } else {
                    if(ch == '\'')
                        status = none;
                }
                continue;
            case none :
                switch(ch){
                case '/':
                    if('/' == (chn = fgetc(fp))){
                        status = in_line_comment;
                        continue;
                    } else if('*' == chn){
                        status = in_range_comment;
                        continue;
                    } else
                        ungetc(chn, fp);
                    break;
                case '"':
                    status = in_string;
                    break;
                case '\'':
                    status = in_char_constant;
                    break;
                }
            }
        }
        return count;
    }
    
    int main(void){
        FILE *fp = stdin;
        size_t c = counter(fp);
        printf("%lu\n", c);
    
        return 0;
    }
    

提交回复
热议问题