C语言第一课课后作业不知道什么问题一直错误
本帖最后由 1479989860 于 2022-10-11 18:06 编辑#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 *filename);
int isCode(const char *filename);
void findAllDirs(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,"The path %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("目前你总共写了 %1d 行代码! \n\n", total);
return 0;
}
这个是我的代码,对着小甲鱼的检查了好久都不知道问题在哪。。。。。
执行./a.out后一直显示计算中,然后操作命令也输入不了。
因为发不了图片只能这样描述,给大佬带来的不便请多见谅,第一次学C希望可以帮我看一下错在哪了{:5_100:} 本帖最后由 jackz007 于 2022-10-11 19:13 编辑
printf("目前你总共写了 %ld 行代码! \n\n", total);// 目测你把 "ld" 写成了 "1d""l" 是 字母 L 的小写
你的代码是复制现成的还是自己抄写的?
因为没有 Linux 环境,无法实际编译、运行,所以,只是粗略看了下代码,似乎没有问题,建议把编译好的代码放到一个单独的子目录内,里面只放一个扩展名为 .c 的源代码文件,然后,再运行试试,应该瞬间就出结果。 jackz007 发表于 2022-10-11 18:25
你的代码是复制现成的还是自己抄写的?
因为没有 Linux 环境,无法实际编译、运行,所 ...
自己写了在Linux里复制下来的,运行的话跟着小甲鱼视频上面的输入可以吗,我先去试试!
非常感谢!!!!!{:10_298:} 本帖最后由 1479989860 于 2022-10-11 20:32 编辑
1479989860 发表于 2022-10-11 20:26
自己写了在Linux里复制下来的,运行的话跟着小甲鱼视频上面的输入可以吗,我先去试试!
非常感谢!!! ...
./test.c:行10: long: 未找到命令
./test.c:行12: 未预期的符号 `(' 附近有语法错误
./test.c:行12: `int countLines(const char *filename);'
现在显示的是这个{:10_266:} 本帖最后由 jackz007 于 2022-10-11 20:57 编辑
1479989860 发表于 2022-10-11 20:30
./test.c:行10: long: 未找到命令
./test.c:行12: 未预期的符号 `(' 附近有语法错误
./test.c:行12:...
我在 Windows 下用 gcc 编译,就 72 行一个 lstat() 未定义错误,这是错误信息:
D:\\C>g++ -o x x.c
x.c: In function 'void findAllDirs(const char*)':
x.c:72:46: error: 'lstat' was not declared in this scope
lstat(entry->d_name, &statbuf);
^
D:\\C>
编了个假的给糊弄了一下:
lstat(char * name , struct stat * x)
{
}
结果,就可以正常编译过去了,无错误,无警告,当然,由于有假函数,不可能正常运行。
这就至少说明,这个代码真的没有任何的语法错误。 jackz007 发表于 2022-10-11 20:52
我在 Windows 下用 gcc 编译,就 72 行一个 lstat() 未定义错误,这是错误信息:
编了 ...
{:10_266:}绝望了,是不是因为我的VBOx和小甲鱼的版本不一样代码识别不了 本帖最后由 jackz007 于 2022-10-12 00:31 编辑
1479989860 发表于 2022-10-12 00:08
绝望了,是不是因为我的VBOx和小甲鱼的版本不一样代码识别不了
和 VBOX 及 Linux,甚至和 gcc 都没有直接的关系,编译还是有错误信息?
像我一样,用命令行
g++ -o test test.c
编译试试看呢,当然,启动程序需要这样键入命令:
./test jackz007 发表于 2022-10-12 00:26
和 VBOX 及 Linux,甚至和 gcc 都没有直接的关系,编译还是有错误信息?
像我一样 ...
我试了一下,输入之后还是一直显示计算中,但是打其他代码就没什么问题都能正常运行。
就像我现在学到第三课的打印,那个鱼的作业也能正常输出。
我用
gcc test.c -o test
./test
这个也不行,也是显示正在计算中{:10_291:} 1479989860 发表于 2022-10-12 01:54
我试了一下,输入之后还是一直显示计算中,但是打其他代码就没什么问题都能正常运行。
就像我现在学到第 ...
这个目录下有很多文件和子目录? jackz007 发表于 2022-10-12 01:57
这个目录下有很多文件和子目录?
没有,就一个文件和一个子目录,每个作业我都分开另创文件的 1479989860 发表于 2022-10-12 02:11
没有,就一个文件和一个子目录,每个作业我都分开另创文件的
这份代码的关键环节是 findAllDirs() 函数,你先暂时把下面的代码替换到你的源代码中,注意保存好原始代码文件,然后,编译、运行,看看屏显信息是什么,是否符合实际情况。
void findAllDirs(const char *path)
{
DIR *dp;
struct dirent *entry;
struct stat statbuf;
if ((dp = opendir(path)) == NULL)
{
fprintf(stderr,"The path %s is wrong!\n", path);
return;
}
chdir(path);
printf("进入目录:%s\n\n" , path) ; // 【添加】
while ((entry = readdir(dp)) != NULL)
{
lstat(entry->d_name, &statbuf);
printf("%s" , entry -> d_name)
if (!strcmp(".", entry->d_name) || !strcmp("..", entry->d_name))
continue;
if (S_ISDIR(statbuf.st_mode))
{
printf("[目录] - %s\n" , entry->d_name) ;// 【添加】
findAllDirs(entry->d_name);
}
else
{
printf("[文件] - %s\n" , entry->d_name) ;// 【添加】
if (isCode(entry->d_name))
{
total += countLines(entry->d_name);
}
}
}
chdir("..");
printf("退出目录:%s\n\n" , path) ;// 【添加】
closedir(dp) ;
} jackz007 发表于 2022-10-12 09:14
这份代码的关键环节是 findAllDirs() 函数,你先暂时把下面的代码替换到你的源代码中,注意保存 ...
是要怎么替换,是不是要从新建一个文档还是在原有的代码上加上这串代码{:10_245:}
我试了一下新建的好像不可以的样子 本帖最后由 jackz007 于 2022-10-13 08:23 编辑
1479989860 发表于 2022-10-13 03:27
是要怎么替换,是不是要从新建一个文档还是在原有的代码上加上这串代码
我试了一下新建的好像 ...
拷贝一份你的代码文件 "test.c",把副本文件重命名为 "x.c",用文本编辑器打开 "x.c",找到findAllDirs() 的函数定义,把属于这个函数的代码全部都删掉,然后,把我贴的代码粘贴到原来这个函数代码的位置,存盘,再编译,再运行。
页:
[1]