|
发表于 2019-5-10 17:18:54
|
显示全部楼层
本帖最后由 我叫MD 于 2019-5-10 17:33 编辑
首先,以后这种问题自己对照一下源代码就解决了,我刚开始就学,也是这个代码,搞得头都大了,一行一行对照下来就发现问题了
其次,你的这个代码我看了下,比我第一次抄的时候好多了,问题并不大,我把你的代码复制下来,已经指出来了
最后,以后提问的时候,最好是放一小段代码,哪里出错,放哪段代码,如果放这样长的代码的话,必要的注释一定要写上,要不然这种代码一般不会有人看的,以后改进哦
#include <io.h>
#include <direct.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 256
long total;
int countLines(const char *filename);
void findAllCodes(const char *path);
void findALLFiles(const char *path);
int countLines(const char *filename)
{
FILE *fp;
int count = 0;
int temp;
if((fp = fopen(filename,"r")) == NULL)
{
fprintf(stderr,"Can not open the file:%s\n",filename);
return 0;
}
while ((temp = fgetc(fp)) !=EOF)
{
if (temp == '\n')
{
count++;
}
}
fclose(fp); //这里分号有问题,改为英文版分号
return count;
}
void findAllCodes(const char *path)
{
struct _finddata_t fa;
long handle;
char thePath[MAX], target[MAX];
strcpy(thePath, path);
if((handle = _findfirst(strcat(thePath,"/*.c"), &fa)) != -1L) //这里看if的第二个括号 同样是改为英文版
{
do
{
sprintf(target, "%s/%s", path, fa.name);
total += countLines(target);
}while (_findnext(handle, &fa) == 0);
}
_findclose(handle);
}
void findALLDirs(const char *path)
{
struct _finddata_t fa;
long handle;
char thePathe[MAX]; //这里是thePath 并不是thePathe
strcpy(thePathe, path); //这里是thePath 并不是thePathe
if((handle = _findfirst(strcat(thePath, "/*"), &fa)) ==-1L)
{
forintf(stderr, "The path %s is wrong!\n",path); //看看你的打印函数 fprintf 看看你写的是什么
return;
}
do
{
if (!strcmp(fa.name, ".") || !strcmp(fa.name, ".."))
continue;
if( fa.attrib == _A_SUBDIR)
{
sprintf(thePath, "%s/%s", path, fa.name);
findAllCodes(thePath);
findALLDirs(thePath);
}
}while (_findnext(handle, &fa) == 0);
_findclose(handle);
}
int main()
{
char path[MAX] =".";
printf("计算中...\n");
findAllCodes(path);
findALLDirs(path);
printf("目前你总共写了 %1d 行代码! \n\n", total);
system("pause");
return 0;
} |
|