Robinluo 发表于 2018-5-11 19:37:50

带你学C带你飞 S1E2 课后代码行数统计问题

本帖最后由 Robinluo 于 2018-5-11 20:44 编辑

操作系统MacOS 开发软件 XCode
动动手那里,按照小甲鱼的作业讲代码都敲了出来,但是输出的结果一直是0, 也就是统计不了当前目录和子目录下的代码数,问下大家如何解决呢?

#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>

#define MAX 256

long total;

int countLines(const char *filename);
int isCode(const char *filename);
void findAllDirs(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;
}

int isCode(const char *filename)
{
    int length;
   
    length = strlen(filename);
   
    if (!strcmp(filename + (length - 2), ".c"))
    {
      return 1;
    }
    else
    {
      return 0;
    }
}

void findAllDirs(const char *path)
{
    DIR *dp;
    struct dirent *entry;
    struct stat statbuf;
   
    if ((dp = opendir(path)) == NULL)
    {
      fprintf(stderr, "The path %s is wrong!\n", path);
      return;
    }
   
    chdir(path);
    while ((entry = readdir(dp)) != NULL)
    {
      lstat(entry->d_name, &statbuf);
      
      if (!strcmp(".", entry->d_name) || !strcmp("..", entry->d_name))
            continue;
      
      if (S_ISDIR(statbuf.st_mode))
      {
            findAllDirs(entry->d_name);
      }
      else
      {
            if (isCode(entry->d_name))
            {
                total += countLines(entry->d_name);
            }
      }
    }
   
    chdir("..");
    closedir(dp);
}

int main()
{
    char path = ".";
   
    printf("计算中...\n");
   
    findAllDirs(path);
   
    printf("目前你总共写了 %ld 行代码!\n\n", total);
   
    return 0;
}

纯拷贝小甲鱼的代码

ba21 发表于 2018-5-11 20:34:39

把你的代码上上来很难?

Robinluo 发表于 2018-5-11 20:45:07

ba21 发表于 2018-5-11 20:34
把你的代码上上来很难?

已附上

ba21 发表于 2018-5-11 20:51:22

Robinluo 发表于 2018-5-11 20:45
已附上

根本无法编译

Robinluo 发表于 2018-5-11 21:19:42

ba21 发表于 2018-5-11 20:51
根本无法编译

可以编译的,在Xcode下面,不是在windows下
页: [1]
查看完整版本: 带你学C带你飞 S1E2 课后代码行数统计问题