还不够好 发表于 2021-1-24 11:43:28

第一课课后题照着写代码,出错了,新手不会...


#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(filemame, "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;
}

风过无痕1989 发表于 2021-1-24 11:46:12

从图片上看,你第23行的括号不是英文的

风过无痕1989 发表于 2021-1-24 11:56:21

本帖最后由 风过无痕1989 于 2021-1-24 22:16 编辑

仔细检查发现: if ((fp = fopen(filemame, "r")) == NULL)

错了一个字母:filename 错写成了 filemame

第31行 if (temp == "\n") 应该是单引号,不是双引号。单引号表示回车键,双引号则表示引号内是个字符串

if (temp == '\n')

马邦浩 发表于 2021-1-24 20:37:21

1.c|23|error: 'filemame' undeclared (first use in this function); did you mean 'filename'?

还不够好 发表于 2021-1-25 09:12:21

马邦浩 发表于 2021-1-24 20:37
1.c|23|error: 'filemame' undeclared (first use in this function); did you mean 'filename'?

你用的什么编译器呀

心驰神往 发表于 2021-1-25 09:15:24

还不够好 发表于 2021-1-25 09:12
你用的什么编译器呀

你也是DEV

还不够好 发表于 2021-1-25 09:25:04

心驰神往 发表于 2021-1-25 09:15
你也是DEV

心驰神往 发表于 2021-1-25 09:56:01

本帖最后由 心驰神往 于 2021-1-25 10:01 编辑

还不够好 发表于 2021-1-25 09:25



#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)// if ((fp = fopen(filemame, "r")) == NULL) name你打成了mame
      {
                fprintf(stderr,"Can not open the file:%s\n",filename);
                        return 0;
      }
      
      while((temp = fgetc(fp)) != EOF)
      {
               if (temp == '\n')//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)//小括号位置不对, 你的是if((handle = _findfirst(strcat(thePath,"/*.c"),&fa) != -1L)),&fa后面连续两个))
      {
                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)//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-1-29 20:53:43

{:5_102:}
页: [1]
查看完整版本: 第一课课后题照着写代码,出错了,新手不会...