我代码出问题了,( missing ';' before 'type')求大佬看看。不难的,
#include<stdio.h>#include <stdlib.h>
#include<time.h>
#include <string.h>
#define MAX_FILE10 //最大文件个数
#define FILE 1 //结点代表为文件
#define FOLDER 0 //结点代表为文件夹
typedef struct FileNode{
char name; //文件名称
char path; //文件路径
time_t create_t; //创建时间
int status; //文件属性
struct FileNode *child,*brother; //孩子节点和兄弟节点
}FileNode,*File; // 结点别名,指向结点的指针别名
File root; //根文件
File current; //当前文件
File p; //文件的指针
File path; //待使用的工具结构体
File T;
int type; //新建文件类型
int symbol;
char com;
char fircom; //第一级命令
char seccom; //第二级命令
//系统初始化
void Init(){
root=(FileNode *)malloc(sizeof(FileNode));
current=(FileNode *)malloc(sizeof(FileNode));
path=(FileNode *)malloc(sizeof(FileNode));
T=(FileNode *)malloc(sizeof(FileNode)); //root、current、path、T申请内存空间。
strcpy(root->name,"ROOT");
strcpy(root->path,"ROOT");//初始化ROOT根目录路径
root->create_t=time(NULL);
root->status=0;
root->child=NULL;
root->brother=NULL;
}
//变量直接赋值函数
void Add(File *a,File *b)
{
(*a)->create_t=(*b)->create_t;
(*a)->child=(*b)->child;
strcpy((*a)->name,(*b)->name);
(*a)->brother=(*b)->brother;
(*a)->status=(*b)->status;
strcpy((*a)->path,(*b)->path);
}
//查找目标文件工具
void Research(File F)
{ //遍历当前节点的所有子孙节点找到目标节点
if(F==NULL) //判断当前结点是否为NULL
return ;
if(strcmp(F->path,path->path)==0)//判断是否为目标文件
{
Add(¤t,&F);
p=F; //把当前文件改为目标文件
symbol=0; //设置寻找结果标志
}
if(symbol==1)
{
Research(F->child); //递归函数
Research(F->brother);
}
return ;
}
//文件|文件夹切换
void Cd()
{
if(strcmp(seccom,"\\")==0) //返回根文件
{
if(strcmp(p->path,"ROOT")==0) //如果当前文件在Root不做反应
{
return ;
}
p=root; //在任意路径下切换回根路径 ROOT
Add(¤t,&p);
}
else if(strcmp(seccom,"..")==0) //切换到当前路径的上级文件夹
{
if(strcmp(current->path,"ROOT")==0) //如果当前文件在Root不做反应
{
return ;
}
else
{
strcpy(seccom,current->path); //当前文件不在根文件
int a=strlen(seccom); //从当前文件的path字符串中截取双亲文件的path,然后从根文件向下寻找
char * find=strrchr(seccom,'\\');
int b=strlen(find);
int c=a-b;
char d="0";
strncpy(d,seccom,c);
strcpy(path->path,d); //得到双亲文件的path
symbol=1; //初始化寻找结果标志
Research(root); //从root开始查找
}
}
else
{
symbol=1; //初始化寻找结果标志
Add(&T,¤t);
Add(&path,¤t);
strcat(path->path,"\\");
strcat(path->path,seccom);
Research(T); //查找目标文件工具
if(symbol==1)
printf("路径不存在或者错误!!!\n");
}
}
//遍历文件
void Traverse(File F)
{
printf("%s",F->name); //输出名称
if(F->status==1) //输出文件类型
printf(" FILE");
else
printf(" FOLDER ");
time (&F->create_t); //输出时间
printf("创建日期:%s",asctime(gmtime(&F->create_t)));
if(F->brother!=NULL)
Traverse(F->brother);
return ;
}
//列出当前路径下的全部文件夹和文件
void Dir()
{
if(p->child!=NULL) //是否有子节点且不是文件
{
Traverse(p->child);
}
}
//新建文件夹\文件
void AddFile(File *New)
{
char *a=NULL;
a=(char*)malloc(100);
strcpy(a,current->path); //制作新文件的path
strcat(a,"\\");
strcat(a,seccom);
*New=(File)malloc(sizeof(FileNode));
//New=new FileNode;
strcpy((*New)->name,seccom); //新建文件的name
strcpy((*New)->path,a); //新建文件的path
(*New)->create_t=time(NULL); //新建文件的time
(*New)->status=type; //新建文件的类型
(*New)->child=NULL;
(*New)->brother=NULL;
}
void NewFile()
{
if(p->status==1) //判断文件类型
{
printf("这是一个文件!\n");
return;
}
if(p->child!=NULL) //判断新建的文件是否存在
{
if(strcmp(p->child->name,seccom)==0) //判断新建的第一个子文件是否和新建文件同名
{
printf("文件|文件夹已存在!\n");
return ;
}
p=p->child; //把当前文件改为目标文件
while(!((p->brother==NULL)||(strcmp(p->brother->name,seccom)==0)))//判断当前文件的下一个兄弟文件是否和新建文件同名
p=p->brother;
if(p->brother!=NULL)//判断上一个结束原因
{
Add(¤t,&p);
strcpy(seccom,"..");//如果存在同名文件,返回主函数,并且调整当前文件指针指向
Cd();
printf("文件|文件夹已存在!!\n");
return ;
}
else
{
Add(¤t,&p);
strcpy(com,seccom);
strcpy(seccom,".."); //不存在同名文件夹,调整当前文件指针指向
Cd();
strcpy(seccom,com);
}
}
if(p->child!=NULL) //判断是否有子文件
{
p=p->child;
while(p->brother!=NULL)
p=p->brother;
AddFile(&(p->brother));
Add(¤t,&p);
strcpy(seccom,"..");
Cd();
}
else
{
AddFile(&(p->child));
Add(¤t,&p);
printf("文件|文件夹");
printf("创建成功\n");
}
}
void Delete() //删除文件\文件夹
{
if(strcmp(p->child->name,seccom)==0)//判断子文件是否为待删除文件
{
p->child=p->child->brother;
return ;
}
p=p->child; //调整当前文件指针指向
while(!((p->brother==NULL)||(strcmp(p->brother->name,seccom)==0)))//判断当前文件的下一个兄弟文件是否为待删除命令
p=p->brother; //调整当前文件指针指向
if(p->brother==NULL)
{
Add(¤t,&p);
strcpy(seccom,"..");
Cd();
return ;
}
p->brother=p->brother->brother;
Add(¤t,&p);
strcpy(seccom,"..");
Cd(); //删除之后返回到双亲文件
}
//退出系统
void Exit()
{
printf("谢谢使用!\n");
exit(0);
}
int main()
{
Init(); //系统初始化
printf("*****欢迎使用本系统****\n");
printf("使用说明:\n");
printf("1.在当前路径下新建文件夹:md\n");
printf("2.在当前路径下新建文件:mf\n");
printf("3.在任意路径下切换回根路径 ROOT:cd \\\n");
printf("4.列出当前路径下的全部文件夹和文件:dir\n");
printf("5.切换到当前路径下的某文件夹:cd 文件夹|文件\n");
printf("6.切换到当前路径的上级文件夹:cd ..\n");
printf("7.删除当前路径下的某文件或文件夹(及其下所有文件夹及文件):del\n");
printf("8.退出系统:exit\n");
Add(¤t,&root);
p=root;
while(1)
{
printf("%s> ",current->path); //输出当前位置
scanf("%s",fircom);//cin>>fircom; //获得第一级命令
if(!strcmp(fircom,"exit"))
{
Exit(); //退出系统
}
else if(!strcmp(fircom,"dir"))
{
Dir(); //列出当前文件夹的全部文件和详细信息
fflush(stdin);//cin.sync();
}
else if(!strcmp(fircom,"cd")||!strcmp(fircom,"md")||!strcmp(fircom,"mf")||!strcmp(fircom,"del"))
{
scanf("%s",seccom);//cin>>seccom;
if(!strcmp(fircom,"cd")) //切换到当前路径下的某文件夹
{
Cd();
}
else if(!strcmp(fircom,"md")) //新建文件夹
{
type=0;
NewFile();
}
else if(!strcmp(fircom,"mf")) //新建文件
{
type=1;
NewFile();
}
else if(!strcmp(fircom,"del")) //删除文件\文件夹
{
Delete();
}
}
else
{
fflush(stdin); //清除缓冲区未读取信息
}
}
return 0;
}
复制运行一下就行,大佬帮帮我。 运行了,什么问题都没有啊 Tec 发表于 2019-12-18 15:24
运行了,什么问题都没有啊
我用的c++显示7个错误
E:\cc\1.c(96) : error C2143: syntax error : missing ';' before 'type'
E:\cc\1.c(97) : error C2143: syntax error : missing ';' before 'type'
E:\cc\1.c(98) : error C2143: syntax error : missing ';' before 'type'
E:\cc\1.c(99) : error C2143: syntax error : missing ';' before 'type'
E:\cc\1.c(100) : error C2143: syntax error : missing ';' before 'type'
E:\cc\1.c(101) : error C2065: 'd' : undeclared identifier
E:\cc\1.c(101) : warning C4047: 'function' : 'char *' differs in levels of indirection from 'int '
E:\cc\1.c(101) : warning C4024: 'strncpy' : different types for formal and actual parameter 1
E:\cc\1.c(101) : error C2065: 'c' : undeclared identifier
E:\cc\1.c(104) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'int '
E:\cc\1.c(104) : warning C4024: 'strcpy' : different types for formal and actual parameter 2
Error executing cl.exe.
1.obj - 7 error(s), 4 warning(s)
本帖最后由 Tec 于 2019-12-18 16:17 编辑
用的vs2015
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
#include<time.h>
#include <string.h>
#define MAX_FILE10 //最大文件个数
#define FILE 1 //结点代表为文件
#define FOLDER 0 //结点代表为文件夹
typedef struct FileNode {
char name; //文件名称
char path; //文件路径
time_t create_t; //创建时间
int status; //文件属性
struct FileNode *child, *brother; //孩子节点和兄弟节点
}FileNode, *File; // 结点别名,指向结点的指针别名
File root; //根文件
File current; //当前文件
File p; //文件的指针
File path; //待使用的工具结构体
File T;
int type; //新建文件类型
int symbol;
char com;
char fircom; //第一级命令
char seccom; //第二级命令
//系统初始化
void Init() {
root = (FileNode *)malloc(sizeof(FileNode));
current = (FileNode *)malloc(sizeof(FileNode));
path = (FileNode *)malloc(sizeof(FileNode));
T = (FileNode *)malloc(sizeof(FileNode)); //root、current、path、T申请内存空间。
strcpy(root->name, "ROOT");
strcpy(root->path, "ROOT");//初始化ROOT根目录路径
root->create_t = time(NULL);
root->status = 0;
root->child = NULL;
root->brother = NULL;
}
//变量直接赋值函数
void Add(File *a, File *b)
{
(*a)->create_t = (*b)->create_t;
(*a)->child = (*b)->child;
strcpy((*a)->name, (*b)->name);
(*a)->brother = (*b)->brother;
(*a)->status = (*b)->status;
strcpy((*a)->path, (*b)->path);
}
//查找目标文件工具
void Research(File F)
{ //遍历当前节点的所有子孙节点找到目标节点
if (F == NULL) //判断当前结点是否为NULL
return;
if (strcmp(F->path, path->path) == 0)//判断是否为目标文件
{
Add(¤t, &F);
p = F; //把当前文件改为目标文件
symbol = 0; //设置寻找结果标志
}
if (symbol == 1)
{
Research(F->child); //递归函数
Research(F->brother);
}
return;
}
//文件|文件夹切换
void Cd()
{
if (strcmp(seccom, "\\") == 0) //返回根文件
{
if (strcmp(p->path, "ROOT") == 0) //如果当前文件在Root不做反应
{
return;
}
p = root; //在任意路径下切换回根路径 ROOT
Add(¤t, &p);
}
else if (strcmp(seccom, "..") == 0) //切换到当前路径的上级文件夹
{
if (strcmp(current->path, "ROOT") == 0) //如果当前文件在Root不做反应
{
return;
}
else
{
strcpy(seccom, current->path); //当前文件不在根文件
int a = strlen(seccom); //从当前文件的path字符串中截取双亲文件的path,然后从根文件向下寻找
char * find = strrchr(seccom, '\\');
int b = strlen(find);
int c = a - b;
char d = "0";
strncpy(d, seccom, c);
strcpy(path->path, d); //得到双亲文件的path
symbol = 1; //初始化寻找结果标志
Research(root); //从root开始查找
}
}
else
{
symbol = 1; //初始化寻找结果标志
Add(&T, ¤t);
Add(&path, ¤t);
strcat(path->path, "\\");
strcat(path->path, seccom);
Research(T); //查找目标文件工具
if (symbol == 1)
printf("路径不存在或者错误!!!\n");
}
}
//遍历文件
void Traverse(File F)
{
printf("%s", F->name); //输出名称
if (F->status == 1) //输出文件类型
printf(" FILE");
else
printf(" FOLDER ");
time(&F->create_t); //输出时间
printf("创建日期:%s", asctime(gmtime(&F->create_t)));
if (F->brother != NULL)
Traverse(F->brother);
return;
}
//列出当前路径下的全部文件夹和文件
void Dir()
{
if (p->child != NULL) //是否有子节点且不是文件
{
Traverse(p->child);
}
}
//新建文件夹\文件
void AddFile(File *New)
{
char *a = NULL;
a = (char*)malloc(100);
strcpy(a, current->path); //制作新文件的path
strcat(a, "\\");
strcat(a, seccom);
*New = (File)malloc(sizeof(FileNode));
//New=new FileNode;
strcpy((*New)->name, seccom); //新建文件的name
strcpy((*New)->path, a); //新建文件的path
(*New)->create_t = time(NULL); //新建文件的time
(*New)->status = type; //新建文件的类型
(*New)->child = NULL;
(*New)->brother = NULL;
}
void NewFile()
{
if (p->status == 1) //判断文件类型
{
printf("这是一个文件!\n");
return;
}
if (p->child != NULL) //判断新建的文件是否存在
{
if (strcmp(p->child->name, seccom) == 0) //判断新建的第一个子文件是否和新建文件同名
{
printf("文件|文件夹已存在!\n");
return;
}
p = p->child; //把当前文件改为目标文件
while (!((p->brother == NULL) || (strcmp(p->brother->name, seccom) == 0)))//判断当前文件的下一个兄弟文件是否和新建文件同名
p = p->brother;
if (p->brother != NULL)//判断上一个结束原因
{
Add(¤t, &p);
strcpy(seccom, "..");//如果存在同名文件,返回主函数,并且调整当前文件指针指向
Cd();
printf("文件|文件夹已存在!!\n");
return;
}
else
{
Add(¤t, &p);
strcpy(com, seccom);
strcpy(seccom, ".."); //不存在同名文件夹,调整当前文件指针指向
Cd();
strcpy(seccom, com);
}
}
if (p->child != NULL) //判断是否有子文件
{
p = p->child;
while (p->brother != NULL)
p = p->brother;
AddFile(&(p->brother));
Add(¤t, &p);
strcpy(seccom, "..");
Cd();
}
else
{
AddFile(&(p->child));
Add(¤t, &p);
printf("文件|文件夹");
printf("创建成功\n");
}
}
void Delete() //删除文件\文件夹
{
if (strcmp(p->child->name, seccom) == 0)//判断子文件是否为待删除文件
{
p->child = p->child->brother;
return;
}
p = p->child; //调整当前文件指针指向
while (!((p->brother == NULL) || (strcmp(p->brother->name, seccom) == 0)))//判断当前文件的下一个兄弟文件是否为待删除命令
p = p->brother; //调整当前文件指针指向
if (p->brother == NULL)
{
Add(¤t, &p);
strcpy(seccom, "..");
Cd();
return;
}
p->brother = p->brother->brother;
Add(¤t, &p);
strcpy(seccom, "..");
Cd(); //删除之后返回到双亲文件
}
//退出系统
void Exit()
{
printf("谢谢使用!\n");
exit(0);
}
int main()
{
Init(); //系统初始化
printf("*****欢迎使用本系统****\n");
printf("使用说明:\n");
printf("1.在当前路径下新建文件夹:md\n");
printf("2.在当前路径下新建文件:mf\n");
printf("3.在任意路径下切换回根路径 ROOT:cd \\\n");
printf("4.列出当前路径下的全部文件夹和文件:dir\n");
printf("5.切换到当前路径下的某文件夹:cd 文件夹|文件\n");
printf("6.切换到当前路径的上级文件夹:cd ..\n");
printf("7.删除当前路径下的某文件或文件夹(及其下所有文件夹及文件):del\n");
printf("8.退出系统:exit\n");
Add(¤t, &root);
p = root;
while (1)
{
printf("%s> ", current->path); //输出当前位置
scanf("%s", fircom);//cin>>fircom; //获得第一级命令
if (!strcmp(fircom, "exit"))
{
Exit(); //退出系统
}
else if (!strcmp(fircom, "dir"))
{
Dir(); //列出当前文件夹的全部文件和详细信息
fflush(stdin);//cin.sync();
}
else if (!strcmp(fircom, "cd") || !strcmp(fircom, "md") || !strcmp(fircom, "mf") || !strcmp(fircom, "del"))
{
scanf("%s", seccom);//cin>>seccom;
if (!strcmp(fircom, "cd")) //切换到当前路径下的某文件夹
{
Cd();
}
else if (!strcmp(fircom, "md")) //新建文件夹
{
type = 0;
NewFile();
}
else if (!strcmp(fircom, "mf")) //新建文件
{
type = 1;
NewFile();
}
else if (!strcmp(fircom, "del")) //删除文件\文件夹
{
Delete();
}
}
else
{
fflush(stdin); //清除缓冲区未读取信息
}
}
return 0;
} 好奇怪啊{:10_266:} 为什么你的可以运行你复制你的代码错误反而变多了
{:9_220:}
--------------------Configuration: 1 - Win32 Debug--------------------
Compiling...
1.c
E:\cc\1.c(80) : error C2001: newline in constant
E:\cc\1.c(81) : error C2143: syntax error : missing ')' before '{'
E:\cc\1.c(86) : error C2040: 'p' : 'int ' differs in levels of indirection from 'struct FileNode *'
E:\cc\1.c(86) : error C2099: initializer is not a constant
E:\cc\1.c(87) : error C2143: syntax error : missing ')' before '&'
E:\cc\1.c(87) : error C2143: syntax error : missing '{' before '&'
E:\cc\1.c(87) : error C2059: syntax error : '&'
E:\cc\1.c(87) : error C2059: syntax error : ')'
E:\cc\1.c(88) : error C2059: syntax error : '}'
E:\cc\1.c(109) : error C2059: syntax error : 'else'
E:\cc\1.c(114) : error C2001: newline in constant
E:\cc\1.c(121) : error C2059: syntax error : '}'
E:\cc\1.c(143) : warning C4013: 'Traverse' undefined; assuming extern returning int
E:\cc\1.c(153) : error C2001: newline in constant
E:\cc\1.c(154) : error C2146: syntax error : missing ')' before identifier 'strcat'
Error executing cl.exe.
1.obj - 14 error(s), 1 warning(s) Tec 发表于 2019-12-18 16:16
用的vs2015
我只能下一个vs2015嘛。。。Visual C++ 6.0怎么用不了。。。 不清楚你那边的具体情况,我也不知道。。 Tec 发表于 2019-12-18 16:28
不清楚你那边的具体情况,我也不知道。。
能不能加下qq我把vc++ 6.0 发给你你调一下。麻烦了,可以吗,可以的话你私法给我 ,我发不了私人消息。。。。。麻烦了,这个真的对我很重要。
下一个vs的社区版呗,都免费的 Tec 发表于 2019-12-18 16:38
下一个vs的社区版呗,都免费的
可惜的是我们学生是要用vc++的 很谢谢你了。 Tec 发表于 2019-12-18 16:38
下一个vs的社区版呗,都免费的
可以了感谢回答
页:
[1]