0.3 发表于 2024-12-5 23:14:49

为什么我把小甲鱼的代码复制粘贴过去报错了。

第一课课后题,写过的代码总数。我抄写一遍之后报错了,不知道错在哪。复制粘贴小甲鱼的代码还是报错,请问是为啥




#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;
}

FishC 发表于 2024-12-5 23:14:59

看起来你在复制粘贴代码时可能遇到了一些问题。以下是一些可能导致错误的原因和解决方法:

1. **头文件缺失**:你在代码中使用了`#include`,但没有指定具体的头文件。确保你包含了所有需要的头文件,例如:

   #include <stdio.h>
   #include <string.h>
   #include <io.h>

2. **字符数组初始化**:在函数`findAllCodes`和`findALLDirs`中,`thePath`和`target`应该是字符数组而不是单个字符。你需要为它们分配足够的空间,例如:

   char thePath, target;

3. **字符串操作**:在`strcpy`和`strcat`函数中,确保目标数组有足够的空间来存储结果。

4. **变量类型**:在`main`函数中,`char path = ".";`应该是一个字符数组:

   char path[] = ".";

5. **文件路径分隔符**:在Windows系统中,路径分隔符通常是反斜杠`\\`,而不是正斜杠`/`。确保路径拼接时使用正确的分隔符。

6. **文件属性检查**:在`findALLDirs`函数中,检查文件属性时,`fa.attrib == _A_SUBDIR`可能需要使用位运算符:

   if (fa.attrib & _A_SUBDIR)

请根据以上建议修改你的代码,看看是否能解决问题。如果还有其他错误信息,请提供具体的错误信息以便进一步帮助。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

0.3 发表于 2024-12-5 23:21:52

是我编译器的原因吗?哪里出错了

FishC 发表于 2024-12-5 23:22:02

0.3 发表于 2024-12-05 23:21
是我编译器的原因吗?哪里出错了

看起来你的代码中有一些问题可能导致编译错误。以下是一些常见问题和解决方法:

1. **头文件缺失**:确保你包含了所有需要的头文件。根据你的代码,可能需要以下头文件:
   #include <stdio.h>
   #include <string.h>
   #include <io.h>
   #include <stdlib.h>

2. **字符数组初始化**:在函数`findAllCodes`和`findALLDirs`中,`thePath`和`target`应该是字符数组而不是单个字符。你需要为它们分配足够的空间,例如:
   char thePath, target;

3. **字符串操作**:在`strcpy`和`strcat`函数中,确保目标数组有足够的空间来存储结果。

4. **变量类型**:在`main`函数中,`char path = ".";`应该是一个字符数组:
   char path[] = ".";

5. **文件路径分隔符**:在Windows系统中,路径分隔符通常是反斜杠`\\`,而不是正斜杠`/`。确保路径拼接时使用正确的分隔符。

6. **文件属性检查**:在`findALLDirs`函数中,检查文件属性时,`fa.attrib == _A_SUBDIR`可能需要使用位运算符:
   if (fa.attrib & _A_SUBDIR)

请根据以上建议修改你的代码,看看是否能解决问题。如果还有其他错误信息,请提供具体的错误信息以便进一步帮助。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

小甲鱼的二师兄 发表于 2024-12-6 04:27:41

你在 VS,肯定出错啦!

小甲鱼的二师兄 发表于 2024-12-6 04:28:44

小甲鱼的二师兄 发表于 2024-12-6 04:27
你在 VS,肯定出错啦!

人家是 Linux,是 CentOS,你用 Windows,肯定不行啦~

zyx2012 发表于 2024-12-6 06:02:38

这是VScode.得用Linux

0.3 发表于 2024-12-6 12:23:13

zyx2012 发表于 2024-12-6 06:02
这是VScode.得用Linux


有两段 一段Linux一段windows的,我复制的就是windows那段代码,我用的VS

0.3 发表于 2024-12-6 12:24:58

小甲鱼的二师兄 发表于 2024-12-6 04:28
人家是 Linux,是 CentOS,你用 Windows,肯定不行啦~

有两段 一段Linux一段windows的,我复制的就是windows那段代码{:5_99:},请问我得用虚拟机换Linux吗

某一个“天” 发表于 2024-12-6 17:26:54

事实这段windows代码就是有问题,包括我在内的很多人报错
页: [1]
查看完整版本: 为什么我把小甲鱼的代码复制粘贴过去报错了。