嬉皮笑脸 发表于 2019-8-28 18:03:12

S1E2的课后作业求助(不是出错,是最后呈现的行数不对)

作业地址:https://fishc.com.cn/forum.php?mod=viewthread&tid=66283&extra=page%3D1%26filter%3Dtypeid%26typeid%3D570
这是我敲的:

#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 *fliename)
{
        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("你目前总共写了 %1d 行代码! \n\n", total);
        system("pause");

        return 0;
}
标答是101行,但我的运行之后是204行。请问有什么问题

superbe 发表于 2019-8-30 09:28:43

本帖最后由 superbe 于 2019-8-30 09:30 编辑

你敲的没错。int countLines(const char *fliename){。。。这里*fliename应该是*filename,估计是上传时手误。
你敲的代码运行结果是101行。
你确定这个源文件当前目录下或子目录下没有其它.c源文件吗,如果有其它.c也是计算在内的。
页: [1]
查看完整版本: S1E2的课后作业求助(不是出错,是最后呈现的行数不对)