C语言代码计算神器for Mac

  • 程序功能
    • 精确计算一个文件夹中的所有子文件夹中的指定类型代码的行数,人为的换行都会被自动忽略不计。
  • 操作方法
    • 用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;
}
  • 结果如下
屏幕快照 2016-06-16 02.20.10.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容