与时俱学进 发表于 2021-10-23 21:09:32

S1E2运行结果为0

S1E2的课后作业
我用Dev c++照着把代码敲完了,
#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,target;
       
        strcpy(thePath,path);
        if((handle = _findfirst(strcat(thePath,"/*.c"),&fa)) != -1L)
        {
                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 thePath;
       
        strcpy(thePath,path);
        if((handle = _findfirst(strcat(thePath,"/*"), &fa)) == -1L)
        {
                fprintf(stderr,"The path %s is wrong!\n",path);
                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 = ".";
       
        printf("计算中...\n");
       
        findALLCodes(path);
        findALLDirs(path);
       
        printf("目前你总共写了 %ld 行代码!\n\n",total);
        system("pause");
       
        return 0;
}运行结果却是0,检查了好几遍没有错误,然后把代码直接复制进去了试一下结果也是0,自己也不懂怎么找出问题,求助各位大佬了

人造人 发表于 2021-10-23 21:29:18

然后把代码直接复制进去了试一下结果也是0
就冲这句话,你的源代码文件后缀是 .cpp 吧?改成 .c

大马强 发表于 2021-10-23 21:33:04

sprintf(target,"%s%s",path, fa.name);
原句
sprintf(target,"%s/%s",path, fa.name);

大马强 发表于 2021-10-23 21:36:09

第二个错误也是一样的
sprintf(thePath, "%s/%s", path, fa.name);
你在那两个函数找一找就能发现了
#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,target;
      
      strcpy(thePath,path);
      if((handle = _findfirst(strcat(thePath, "/*.c"), &fa)) != -1L)
      {
         do
                {
                        sprintf(target, "%s/%s", path, fa.name);
                        total += countLines(target);
                        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 thePath;
      
      strcpy(thePath,path);
      if((handle = _findfirst(strcat(thePath,"/*"), &fa)) == -1L)
      {
                fprintf(stderr,"The path %s is wrong!\n",path);
                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 = ".";
      
      printf("计算中...\n");
      
      findALLCodes(path);
      findALLDirs(path);
      
      printf("目前你总共写了 %ld 行代码!\n\n",total);
      system("pause");
      
      return 0;
}

大马强 发表于 2021-10-23 21:37:38

注意后缀要为,c

与时俱学进 发表于 2021-10-25 20:25:09

大马强 发表于 2021-10-23 21:37
注意后缀要为,c

谢谢,改了一下可以正确运行了,虽然还不懂原理就是{:5_91:}

与时俱学进 发表于 2021-10-25 20:26:31

大马强 发表于 2021-10-23 21:36
第二个错误也是一样的

你在那两个函数找一找就能发现了

谢谢,可以了,改完这些再把文件后辍改了.c运行就没问题了

与时俱学进 发表于 2021-10-25 20:27:17

大马强 发表于 2021-10-23 21:36
第二个错误也是一样的

你在那两个函数找一找就能发现了

谢谢,可以了,改完这些再把文件后辍改了.c运行就没问题了

与时俱学进 发表于 2021-10-25 20:30:11

与时俱学进 发表于 2021-10-25 20:27
谢谢,可以了,改完这些再把文件后辍改了.c运行就没问题了

刚入站,回复的都是同一个人才发现,sorry
页: [1]
查看完整版本: S1E2运行结果为0