C语言代码计算神器for Mac

来源:互联网 发布:图像复原的数据集 编辑:程序博客网 时间:2024/05/20 01:11
  • 程序功能
    • 精确计算一个文件夹中的所有子文件夹中的指定类型代码的行数,人为的换行都会被自动忽略不计。
  • 操作方法
    • 用X-Code编译完成将可执行文件拖到桌面上双击打开后根据提示操作。
  • 代码如下
#include<stdio.h>#include<stdlib.h>#include<string.h>//计算代码行数int countAmount(char a[]){    int i,sum = 0;    for(i = 0; a[i]; i++)    {        int flag = 0;        //查找这个回车符与上一个回车符之间是否存在内容,回车符的ASCII值是10        if (a[i] == 10) {            for(int j = i - 1; j > 0 && a[j] != 10; j--) {                //ASCII值13不知道是什么字符,但总是出现在换行前面                if (a[j] != ' ' && a[j] !=  13) {                    flag = 1;                    break;                }            }        }        if (flag) {            sum++;        }    }    //如果最后一行没有换行则加1    if (a[i-1] != 10) {        sum++;    }    return sum;}int main(){    /**要执行的find命令*/    char command[5000];    /**需要合并代码的文件夹路径*/    char folderPath[5000];    /**文件后缀名*/    char suffix[20];    /**存放所有搜索到的文件路径的临时文件,在这个文件中每个路径单独占一行,最后这个文件会被删除*/    char tempFile[5000];    /**临时文件的指针*/    FILE *fTempFile;    /**单个文件路径*/    char singleFile[5000];    /**单个文件的指针*/    FILE *fSingleFile;    /**存放单个文件中的所有内容*/    char singleFileContent[1000000];    /**单个文件代码数量*/    int singleFileAmount;    /**所有文件代码总量*/    int allFileAmount;    /**文件的数量*/    int fileNum;    char ch,ch2;    int i,flag;    while(1)    {        printf("请拖入文件夹路径:");        scanf("%s",folderPath);        printf("请输入要合并文件的后缀(如.c,.txt):");        scanf("%s",suffix);        //生成不完整的find命令        strcpy(command,"find ");        strcat(command,folderPath);        strcat(command," -name *");        strcat(command,suffix);        strcat(command,">>");        //生成临时文件的全路径        strcpy(tempFile,folderPath);        strcat(tempFile,"/temp.txt");        //生成完整的find命令        strcat(command,tempFile);        //执行Unix下的find命令,将搜索到的内容输出到temp.txt文件中        system(command);        fTempFile = fopen(tempFile,"r");        fileNum = 0;        allFileAmount = 0;        while(1)        {            i=-1;            //每次得到一个文件的全路径            while((singleFile[++i]=fgetc(fTempFile))!=10&&singleFile[i]!=EOF);            if(singleFile[i]==EOF)            {                break;            }            singleFile[i]=0;//文件内容结尾标志            singleFileAmount = 0;            ch2 = 0;            fSingleFile=fopen(singleFile,"r");//打开文件            i=0;            while((ch=fgetc(fSingleFile))!=EOF)            {                singleFileContent[i++] = ch;            }            singleFileContent[i] = 0;            singleFileAmount = countAmount(singleFileContent);            fileNum++;            printf("%d:%d行 %s\n",fileNum,singleFileAmount,singleFile);            allFileAmount += singleFileAmount;            fclose(fSingleFile);        }        fclose(fTempFile);        //生成删除临时文件的命令        strcpy(singleFile,"rm ");        strcat(singleFile,tempFile);        system(singleFile);//删除临时文件        printf("\n\n此文件夹下:\n\n");        printf("共计%d个.c文件\n\n",fileNum);        printf("共计代码:%d行\n\n",allFileAmount);    }    return 0;}
  • 结果如下

这里写图片描述

0 0
原创粉丝点击