矮的萌丶 发表于 2021-7-17 22:13:46

S1E2:第一个程序 | 课后测试题

本帖最后由 矮的萌丶 于 2021-7-17 22:18 编辑

大佬们求帮我看看计算是哪里出错了嘛?
第一次打代码{:5_100:} ,运算显示”目前你总共写了 7 行代码!“,答案是”目前你总共写了 101行代码!“

#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;
}

矮的萌丶 发表于 2021-7-17 22:14:13

请教各位技术大佬们看看啦!

此方星河 发表于 2021-7-18 07:05:36

我这里显示没毛病啊?

此方星河 发表于 2021-7-18 07:12:00

你是在哪里运行的啊?

矮的萌丶 发表于 2021-7-18 10:19:23

本帖最后由 矮的萌丶 于 2021-7-18 10:20 编辑

此方星河 发表于 2021-7-18 07:12
你是在哪里运行的啊?

在Dev-C++这上面运行的
5.11版本

此方星河 发表于 2021-7-18 10:47:22

那就不清楚了,我原本怀疑你再Linux下运行来着。
我用的是codeblocks,我这里运行的正确。

矮的萌丶 发表于 2021-7-18 11:31:55

现在显示115行了QAQ

#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;
}
页: [1]
查看完整版本: S1E2:第一个程序 | 课后测试题