第一课课后题照着写代码,出错了,新手不会...
#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(filemame, "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;
} 从图片上看,你第23行的括号不是英文的 本帖最后由 风过无痕1989 于 2021-1-24 22:16 编辑
仔细检查发现: if ((fp = fopen(filemame, "r")) == NULL)
错了一个字母:filename 错写成了 filemame
第31行 if (temp == "\n") 应该是单引号,不是双引号。单引号表示回车键,双引号则表示引号内是个字符串
if (temp == '\n') 1.c|23|error: 'filemame' undeclared (first use in this function); did you mean 'filename'?
马邦浩 发表于 2021-1-24 20:37
1.c|23|error: 'filemame' undeclared (first use in this function); did you mean 'filename'?
你用的什么编译器呀 还不够好 发表于 2021-1-25 09:12
你用的什么编译器呀
你也是DEV 心驰神往 发表于 2021-1-25 09:15
你也是DEV
是 本帖最后由 心驰神往 于 2021-1-25 10:01 编辑
还不够好 发表于 2021-1-25 09:25
是
#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)// if ((fp = fopen(filemame, "r")) == NULL) name你打成了mame
{
fprintf(stderr,"Can not open the file:%s\n",filename);
return 0;
}
while((temp = fgetc(fp)) != EOF)
{
if (temp == '\n')//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)//小括号位置不对, 你的是if((handle = _findfirst(strcat(thePath,"/*.c"),&fa) != -1L)),&fa后面连续两个))
{
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)//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;
}
四处错误,已在代码中标出 {:5_102:}
页:
[1]