丶啊液隔离街 发表于 2020-1-5 17:06:54

课后作业1,请问为什么结果不一样

刚开始我MAX打错了,开头那里,打少一个字母,运行失败,然后我补上了再点击运行编译。结果显示我打了7行代码,我在想是不是不对,然后把文件删除了重新另存为保存下来。这次结果就是102行代码,可是小甲鱼老师他的答案不是101行吗,是我哪里打错了吗,我一行一行抄下来的呀,求助,求大佬解答

zltzlt 发表于 2020-1-5 17:07:33

把代码发上来。

丶啊液隔离街 发表于 2020-1-5 17:17:27


#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("¼ÆËãÖD...\n");
       
          findAllCodes(path);
          findALLDirs(path);
       
          printf("Ä¿Ç°Äã×ü12D′áË %ld DD′úÂë! \n\n", total);
          system("pause");
       
          return 0;
}

丶啊液隔离街 发表于 2020-1-5 17:18:22

zltzlt 发表于 2020-1-5 17:07
把代码发上来。

大佬,怎么发啊...我直接复制粘贴发下面了可以吗,图片这些都要链接,不知道怎么发..

丶啊液隔离街 发表于 2020-1-5 17:19:07


#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("¼ÆËãÖD...\n");
       
          findAllCodes(path);
          findALLDirs(path);
       
          printf("Ä¿Ç°Äã×ü12D′áË %ld DD′úÂë! \n\n", total);
          system("pause");
       
          return 0;
}

丶啊液隔离街 发表于 2020-1-5 17:19:49

zltzlt 发表于 2020-1-5 17:07
把代码发上来。

大佬,发出来了,是不是我写错了啥啊,一直没开输入法打字呀

zltzlt 发表于 2020-1-5 17:22:20

丶啊液隔离街 发表于 2020-1-5 17:19
大佬,发出来了,是不是我写错了啥啊,一直没开输入法打字呀

代码没有问题,可能是你打代码时多打了一个空行。

人造人 发表于 2020-1-5 17:26:06

丶啊液隔离街 发表于 2020-1-5 17:19


102行,没问题,你说对吧?

别忘了这个程序是干嘛的,就是统计你写的代码的行数


丶啊液隔离街 发表于 2020-1-5 17:26:15

zltzlt 发表于 2020-1-5 17:22
代码没有问题,可能是你打代码时多打了一个空行。

就是我打多了一个空格也算多打了一行代码吗,感谢,因为前面代码7的故障不知道怎么出来的,我就删文件重新点编译了,期间我以为就是空格跟小甲鱼老师的不一样,就是有些地方要空出来很多是不是不用的呀,有些不一样的地方都是手动在前面点空格到跟小甲鱼老师的上一行一样的位置可能有个地方打多了,没问题就行了,感谢大佬{:5_95:}我爱你

人造人 发表于 2020-1-5 17:28:31

丶啊液隔离街 发表于 2020-1-5 17:26
就是我打多了一个空格也算多打了一行代码吗,感谢,因为前面代码7的故障不知道怎么出来的,我就删文件重 ...

多一个空格不算一行,多一个回车才算一行

人造人 发表于 2020-1-5 17:29:31

多几个空格也不算一行,只有多一个回车才算一行

丶啊液隔离街 发表于 2020-1-5 17:32:20

人造人 发表于 2020-1-5 17:26
102行,没问题,你说对吧?

别忘了这个程序是干嘛的,就是统计你写的代码的行数

这样啊,明白了,那就是不用跟小甲鱼老师那样搞准确的空格位置是吧。可是小甲鱼老师的代码那里也是102行呀,为啥他的是101,这个想不明白。也没敲多空格吧..

丶啊液隔离街 发表于 2020-1-5 17:33:37

人造人 发表于 2020-1-5 17:29
多几个空格也不算一行,只有多一个回车才算一行

{:9_228:}打了半天没打错挺开心啦,不管他了,就是说不明白为啥小甲鱼老师的是101,他的代码也是102呀

丶啊液隔离街 发表于 2020-1-5 17:34:40

人造人 发表于 2020-1-5 17:29
多几个空格也不算一行,只有多一个回车才算一行

谢谢大佬们回复我啦{:9_237:}哈哈

人造人 发表于 2020-1-5 17:44:30

丶啊液隔离街 发表于 2020-1-5 17:33
打了半天没打错挺开心啦,不管他了,就是说不明白为啥小甲鱼老师的是101,他的代码也是102呀






告诉我这是几行? 9行?不,这是5行
自动换行,我认为很可能是这个原因,如果你能保证你没有数错的话

人造人 发表于 2020-1-5 17:45:35

计算机认为这是5行,只是让你看起来像9行
这就是自动换行

丶啊液隔离街 发表于 2020-1-5 18:18:12

人造人 发表于 2020-1-5 17:45
计算机认为这是5行,只是让你看起来像9行
这就是自动换行

大佬,我检查了很久,然后实在找不到哪里出问题了,我去小甲鱼老师那直接复制代码过去,居然显示313行代码,不知道什么情况,先继续学着吧,估计是不能复制粘贴?不清楚...我用的Dev-c++这个软件。之前那个7行代码的也是无论怎么搞都不行,吧原文件删除了重新搞又变成102。

人造人 发表于 2020-1-5 18:20:10

丶啊液隔离街 发表于 2020-1-5 18:18
大佬,我检查了很久,然后实在找不到哪里出问题了,我去小甲鱼老师那直接复制代码过去,居然显示313行代 ...

那个程序统计的是当前目录(包括子目录)下所有 .c文件的行数总和

丶啊液隔离街 发表于 2020-1-5 18:23:52

人造人 发表于 2020-1-5 18:20
那个程序统计的是当前目录(包括子目录)下所有 .c文件的行数总和

大佬我懂了,可是我搞了另一个文件夹也显示102,直接复制的小甲鱼老师的,不知道咋回事了...反正没打错就好啦,我感觉没错呀,直接复制也是102,不知道是不是小甲鱼老师弄答案的时候弄多了一行或者少一行,还是我这个软件有bug,或者我的文件夹有啥问题

人造人 发表于 2020-1-5 18:35:11

丶啊液隔离街 发表于 2020-1-5 18:23
大佬我懂了,可是我搞了另一个文件夹也显示102,直接复制的小甲鱼老师的,不知道咋回事了...反正没打错就 ...

嗯,我看了一下,是小甲鱼老师的那个图片不符合代码行数

图片上的是106和101,代码行数是105和102
页: [1] 2
查看完整版本: 课后作业1,请问为什么结果不一样