人丑就要多读书 发表于 2016-9-10 05:17:06

课后作业。我对了,几遍把错误的地方改了。运行不起来,


#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("目前你总共写了 %1d 行代码!\n\n",total);
          system("paus");
          
          return 0;
}

lqjlee 发表于 2016-9-10 07:52:42

看不出来!

人类的先行者 发表于 2016-9-10 08:32:25

运行不起来就说明仍有错误,仔细检查吧

中英文泡椒 发表于 2023-12-4 18:54:52

@FishC_GPT 下面这段代码有什么错误

#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("目前你总共写了 %1d 行代码!\n\n",total);
            system("paus");
            
            return 0;
}

FishC_GPT 发表于 2023-12-4 18:55:15

中英文泡椒 发表于 2023-12-04 18:54
@FishC_GPT 下面这段代码有什么错误

#include
#i ...

这段代码有一些错误:

1. 缺少头文件:`#include <stdio.h>` 和 `#include <string.h>`。

2. 函数名和变量名大小写不一致:`countlines()` 应该修改为 `countLines()`,`findALLCodes()` 应该修改为 `findAllCodes()`,`findALLDirs()` 应该修改为 `findALLFiles()`。

3. 在 `main()` 函数中调用的函数名大小写也需要修改。

4. `total` 变量没有初始化,默认会被赋予一个垃圾值。在使用之前应该将其初始化为0。

5. `system("paus")` 这段代码在Linux上无法执行。

以下是修改后的代码:

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

#define MAX      256

long total = 0;

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, "无法打开文件: %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 findALLFiles(const char *path)
{
    struct _finddata_t fa;
    long handle;
    char thepath;

    strcpy(thepath, path);
    if((handle = _findfirst(strcat(thepath, "/*"), &fa)) == -1L)
    {
      fprintf(stderr, "路径 %s 错误!\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);
            findALLFiles(thepath);
      }
    } while (_findnext(handle, &fa) == 0);

    _findclose(handle);
}

int main()
{
    char path = ".";

    printf("计算中...\n");

    findAllCodes(path);
    findALLFiles(path);

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

    return 0;
}

希望这次能编译运行成功!

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 课后作业。我对了,几遍把错误的地方改了。运行不起来,