报错,不知道怎么改⊙﹏⊙
萌新,练习出错了,求大佬指点( )
#include<stdio.h>
#include<unistd.h>
#include<dirent.h>
#include<string.h>
#include<stdlib.h>
#include<sys/stat.h>
#define MAX 256
long total;
int countLines(const char*path);
int isCode(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++;
}
}
return count;
}
int isCode(const char*filename)
{
int length;
length=strlen(filename);
if (!strcmp(filename+(length-2),".c"))
{
return 1;
}
else
{
return 0;
}
}
void findAllDirs(const char*path)
{
DIR * dp;
struct dirent*entry;
struct stat statbuf;
if((dp=opendir(path))==NULL)
{
fprintf(stderr,"Theath %s is wrong!\n",path);
return;
}
chdir(path);
while((entry=readdir(dp)!=NULL))
{
lstat(entry->d_name,&statbuf);
if(!strcmp(".",entry->d_name)||!strcmp("..",entry->d_name))
countLines;
if (S_lSDIR(statbuf.st_mode))
{
findAllDirs(entry->d_name);
}
else
{
if(isCode(entry->d_name))
chdir("..");
closedir(dp);
}
int main()
{
char path=".";
printf("计算机中...\n");
findAllDirs(path);
printf("目前你总共写了%ld行代码!\n\n",total);
return 0;
}
编译结果就这样,怎么改,求大老指点!
/storage/emulated/0/qeditor/workspace/newfile(梦 总编程多少 ).c: In function 'findAllDirs':
/storage/emulated/0/qeditor/workspace/newfile(梦 总编程多少 ).c:63:15: warning: assignment to 'struct dirent *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
while((entry=readdir(dp)!=NULL))
^
/storage/emulated/0/qeditor/workspace/newfile(梦 总编程多少 ).c:67:4: warning: statement with no effect [-Wunused-value]
countLines;
^~~~~~~~~~
/storage/emulated/0/qeditor/workspace/newfile(梦 总编程多少 ).c:68:8: warning: implicit declaration of function 'S_lSDIR'; did you mean 'S_ISDIR'? [-Wimplicit-function-declaration]
if (S_lSDIR(statbuf.st_mode))
^~~~~~~
S_ISDIR
/storage/emulated/0/qeditor/workspace/newfile(梦 总编程多少 ).c:83:6: warning: 'main' is normally a non-static function [-Wmain]
int main()
^~~~
/storage/emulated/0/qeditor/workspace/newfile(梦 总编程多少 ).c:93:1: error: expected declaration or statement at end of input
}
^
/storage/emulated/0/qeditor/workspace/newfile(梦 总编程多少 ).c:93:1: error: expected declaration or statement at end of input
At top level:
/storage/emulated/0/qeditor/workspace/newfile(梦 总编程多少 ).c:83:6: warning: 'main' defined but not used [-Wunused-function]
int main()
^~~~
编译失败!
没有可执行文件!
:workspace$ 这样试试:
#include<stdio.h>
#include<unistd.h>
#include<dirent.h>
#include<string.h>
#include<stdlib.h>
#include<sys/stat.h>
#define MAX 256
long total;
int countLines(const char*path);
int isCode(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++;
}
}
return count;
}
int isCode(const char*filename)
{
int length;
length=strlen(filename);
if (!strcmp(filename+(length-2),".c"))
{
return 1;
}
else
{
return 0;
}
}
void findAllDirs(const char*path)
{
DIR * dp;
struct dirent*entry;
struct stat statbuf;
if((dp=opendir(path))==NULL)
{
fprintf(stderr,"Theath %s is wrong!\n",path);
return;
}
chdir(path);
while((entry=readdir(dp)!=NULL))
{
lstat(entry->d_name,&statbuf);
if(!strcmp(".",entry->d_name)||!strcmp("..",entry->d_name))
countLines;
if (S_lSDIR(statbuf.st_mode))
{
findAllDirs(entry->d_name);
}
else
{
if(isCode(entry->d_name))
chdir("..");
closedir(dp);
}
int main()
{
char path=".";
printf("计算机中...\n");
findAllDirs(path);
printf("目前你总共写了%ld行代码!\n\n",total);
return 0;
) 这样没有用呀 本帖最后由 superbe 于 2019-9-16 00:09 编辑
#include<stdio.h>
#include<unistd.h>
#include<dirent.h>
#include<string.h>
#include<stdlib.h>
#include<sys/stat.h>
#define MAX 256
long total;
int countLines(const char *path);
int isCode(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;
}
int isCode(const char *filename)
{
int length;
length=strlen(filename);
if (!strcmp(filename+(length-2),".c"))
{
return 1;
}
else
{
return 0;
}
}
void findAllDirs(const char *path)
{
DIR *dp;
struct dirent *entry;
struct stat statbuf;
if((dp=opendir(path))==NULL)
{
fprintf(stderr,"Theath %s is wrong!\n",path);
return;
}
chdir(path);
while((entry=readdir(dp))!=NULL)
{
lstat(entry->d_name,&statbuf);
if(!strcmp(".",entry->d_name)||!strcmp("..",entry->d_name))
continue;
if (S_ISDIR(statbuf.st_mode))
{
findAllDirs(entry->d_name);
}
else
{
if(isCode(entry->d_name))
{
total+=countLines(entry->d_name);
}
}
}
chdir("..");
closedir(dp);
}
int main()
{
char path=".";
printf("计算机中...\n");
findAllDirs(path);
printf("目前你总共写了%ld行代码!\n\n",total);
return 0;
}
粗心打错了很多地方。
页:
[1]