dydy 发表于 2021-7-27 17:28:43

大哥们为啥我输了一百多行改来改去最后运行出现这个S1E2

D:\FishC\s1e2\collect2.exe        ld returned 1 exit status

C:\Users\dy\AppData\Local\Temp\ccEkYgsV.o        作业1.c:(.text+0x2bb): undefined reference to `findAllCodes'
C:\Users\dy\AppData\Local\Temp\ccEkYgsV.o        作业1.c:(.text+0x34f): undefined reference to `findAllCodes'

王逗比666 发表于 2021-7-27 17:35:20

问问题要把你自己写的代码放出来

青出于蓝 发表于 2021-7-27 17:40:21

要关闭对应文件的exe再编译

dydy 发表于 2021-7-27 17:45:20

王逗比666 发表于 2021-7-27 17:35
问问题要把你自己写的代码放出来


#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-27 17:45:30

不要开着对应文件的exe并编译

青出于蓝 发表于 2021-7-27 17:46:22

dydy 发表于 2021-7-27 17:45
#include
#include
#include


跟代码没关系
把D:\FishC\s1e2\collect2.exe    这个文件关上再编译

dydy 发表于 2021-7-27 17:46:43

dydy 发表于 2021-7-27 17:45
#include
#include
#include


就是第一个作业QAQ,麻烦大神看一看

焦糖橙子 发表于 2021-7-27 17:46:56

字面上的意思是你还没有定义findAllCodes这个函数,
你看下你的代码里面有没有对findAllCodes进行声明。

dydy 发表于 2021-7-27 17:50:21

青出于蓝 发表于 2021-7-27 17:46
跟代码没关系
把D:\FishC\s1e2\collect2.exe    这个文件关上再编译

是把文件夹关了编译嘛? 关了编译还是不行奥

逃兵 发表于 2021-7-27 17:50:34

第40行
void findALLCodes(const char *path)
改成
void findAllCodes(const char *path)

dydy 发表于 2021-7-27 17:54:15

逃兵 发表于 2021-7-27 17:50
第40行

改成

太太太太牛了,这么细节,我原来是大写了,请问哥是怎么发现问题的

逃兵 发表于 2021-7-27 18:00:54

dydy 发表于 2021-7-27 17:54
太太太太牛了,这么细节,我原来是大写了,请问哥是怎么发现问题的

报错内容是未定义findAllCodes

然后查找一下看看哪里调用出的问题就行了

这里大小写出现问题,导致出错
页: [1]
查看完整版本: 大哥们为啥我输了一百多行改来改去最后运行出现这个S1E2