让学习使我快乐 发表于 2020-9-15 09:07:38

findAllCodessa 未在范围声明中

本帖最后由 让学习使我快乐 于 2020-9-15 09:10 编辑

告诉我findAllCodessa没有在范围声明中 (百度翻译的)这两行已经重复打了好几遍了 就算是复制甲鱼的粘贴上去也不行是别的地方出错了吗

LuLD 发表于 2020-9-15 09:21:22

应该是 小甲鱼的 那个 计算你写了多少行代码的吧?
那应该是 C
C的后缀名 应该是 .c
.cpp 是C++ 的

还有就是 把你的代码贴出来,图片看着太纠结了

风过无痕1989 发表于 2020-9-15 09:58:35

你将程序名 “未命名2.cpp” 重命名为:未命名2.c 再试试

让学习使我快乐 发表于 2020-9-16 11:30:11

LuLD 发表于 2020-9-15 09:21
应该是 小甲鱼的 那个 计算你写了多少行代码的吧?
那应该是 C
C的后缀名 应该是 .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 findA11Codes(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;
}

风过无痕1989 发表于 2020-9-16 12:10:23

让学习使我快乐 发表于 2020-9-16 11:30


代码没有问题,问题在你的文件名是不是 .c

LuLD 发表于 2020-9-16 14:43:09

本帖最后由 LuLD 于 2020-9-16 14:51 编辑

让学习使我快乐 发表于 2020-9-16 11:30


首先 你的代码缩进有问题,肉眼看你的缩进太多了,应该是四个空格或是一个Tab(字母Q旁边的那个)

其次就是 你报错的那个函数,最顶上声明的是 void findA11Codes(const char *path);All中的 L 是小写的 ,代码 13 行
而 下面的定义 又是void findALLCodes(const char *path),All中的字母L又变成了大写,代码41 行

C语言是严格要求字母的大小写的

还有就是你说复制小甲鱼的代码 也不能运行是因为,文件的后缀名不对,这个上面已经讲过了,应该是 .c




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;
}
//上面是改好缩进的
//Dec++ 的我不清楚这个缩进是否有严格要求
//以下是复制你的代码,看缩进
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;
}

LuLD 发表于 2020-9-16 15:08:29

本帖最后由 LuLD 于 2020-9-16 15:10 编辑

让学习使我快乐 发表于 2020-9-16 11:30


刚刚我又试了一下,缩进不会报错,但是最后运行的结果写了 0 行代码


希望你能继续保持 心态,努力的学习下去

风过无痕1989 发表于 2020-9-16 15:48:52

// 该程序必须在 C 编译器下运行,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);    // C要大写
    findALLDirs(path);

    printf("目前你总共写了 %ld 行代码! \n\n", total);
    system("pause");

    return 0;
}

LuLD 发表于 2020-9-16 16:58:45

风过无痕1989 发表于 2020-9-16 15:48


吓我一跳,我还以为我写错了

风过无痕1989 发表于 2020-9-17 00:54:53

LuLD 发表于 2020-9-16 16:58
吓我一跳,我还以为我写错了

我是要完成每天的回帖数,得到积分才能升级,才会有某些非某个级别才能有的权利,比如隐藏帖子中的部分内容,比如拥有自己的签名。。。。。。

LuLD 发表于 2020-9-17 09:47:15

风过无痕1989 发表于 2020-9-17 00:54
我是要完成每天的回帖数,得到积分才能升级,才会有某些非某个级别才能有的权利,比如隐藏帖子中的部分内 ...

嗯呐,也不知道这哥们儿理解了没有

让学习使我快乐 发表于 2020-9-21 09:21:39

谢谢大家的详细讲解我理解了
页: [1]
查看完整版本: findAllCodessa 未在范围声明中