首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

帮帮看看为什么delete函数没用,怎么改

2013-12-28 
帮帮看看为什么delete函数没用,如何改#includestdio.h#includestdlib.h#includeconio.h#includestr

帮帮看看为什么delete函数没用,如何改
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<iostream>
using namespace std;

#define getpch(type) (type*)malloc(sizeof(type))
#define NULL 0
#define UserNumber 10
#define UserFNumber 10
#define UserOFNumber 5

struct fname
{
char name[1];
int flag;
}nameA[26]={'a',0,'b',0,'c',0,'d',0,'e',0,'f',0,'g',0,'h',0,'i',0,'j',0,'k',0,'l',0,'m',0,'n',0,'o',0,'p',0,'q',0,'r',0,'s',0,'t',0,'u',0,'v',0,'w',0,'x',0,'y',0,'z',0};

struct afd
{
char opname[10];//打开文件名
int flag;
char opfprotect[3];//打开保护码
int rwpoint;//读写指针
}AFD[UserOFNumber];//用户打开的文件

typedef struct
{
char fname[10];//用户文件名
int flag;
int fprotect[3];//文件保护码 r\w\t
int flength;
}ufd,UF[UserFNumber];//用户文件

struct mdf
{
char uname[10];//用户名
UF Udir;//用户文件目录
}UFD[UserNumber];//用户

void intFSystem()
{
int i,j,k,l;
strcpy(UFD[0].uname,"a");
strcpy(UFD[1].uname,"b");
strcpy(UFD[2].uname,"c");
strcpy(UFD[3].uname,"d");
strcpy(UFD[4].uname,"e");
strcpy(UFD[5].uname,"f");
strcpy(UFD[6].uname,"g");
strcpy(UFD[7].uname,"h");
strcpy(UFD[8].uname,"i");
strcpy(UFD[9].uname,"j");

for(i=0;i<10;i++)
{
for(k=0;k<5;k++)
{
do j=rand()%26;
while(nameA[j].flag);

strcpy(UFD[i].Udir[k].fname,nameA[j].name);
nameA[j].flag=1;
UFD[i].Udir[k].flength=rand()%2048+1;
UFD[i].Udir[k].flag=1;
UFD[i].Udir[k].fprotect[0]=rand()%2;
UFD[i].Udir[k].fprotect[1]=rand()%2;
UFD[i].Udir[k].fprotect[2]=rand()%2;
}
for(j=0;j<26;j++)
{
nameA[j].flag=0;
}
}
for(l=0;l<5;l++)
{
strcpy(AFD[i].opname,"");
AFD[l].opfprotect[0]=0;
AFD[l].opfprotect[1]=0;
AFD[l].opfprotect[2]=0;
AFD[l].rwpoint=0;
}
}


void Open(int i)
{
int l,k,n;
char file[10];
for(l=0;l<5;l++)
{
if(!AFD[l].flag)
break;
}
printf("请输入你想打开的文件名:");
scanf("%s",file);
for(n=0;n<5;n++)
{
if(!strcmp(AFD[n].opname,file)&&AFD[n].flag)
{
printf("the file had opened!\n",file);
return;
}
}
for(k=0;k<10;k++)
{
if(!strcmp(UFD[i].Udir[k].fname,file)&&UFD[i].Udir[k].flag)
{
strcpy(AFD[i].opname,UFD[i].Udir[k].fname);
AFD[l].opfprotect[0]=UFD[i].Udir[k].fprotect[0];
AFD[l].opfprotect[1]=UFD[i].Udir[k].fprotect[1];
AFD[l].opfprotect[2]=UFD[i].Udir[k].fprotect[2];
AFD[l].flag=1;
printf("文件已打开!\n");
return;
}
}
printf("文件不存在!\n");
return;
}

void Create(int i)
{
int k;
for(k=0;k<10;k++)
{
if(!UFD[i].Udir[k].flag)
break;
}
if(k>=10)
{
printf("一个用户不能拥有超过10个文件\n\n");
return;
}
printf("请输入你想创建的文件名:");
scanf("%s",UFD[i].Udir[k].fname);
printf("请输入文件长度:");
scanf("%d",&UFD[i].Udir[k].flength);
printf("只读?(1 yes, 0 no):");
scanf("%d",&UFD[i].Udir[k].fprotect[0]);
printf("可写?(1 yes, 0 no):");
scanf("%d",&UFD[i].Udir[k].fprotect[1]);
printf("可执行?(1 yes, 0 no):");
scanf("%d",&UFD[i].Udir[k].fprotect[2]);
UFD[i].Udir[k].flag=1;
return;
}

void Delete(int i)
{
char file[10];
int k;
printf("请输入你想删除的文件名:");
scanf("%d",file);
for(k=0;k<1;k++)
{
while(UFD[i].Udir[k].flag&&!strcmp(UFD[i].Udir[k].fname,file))
{
UFD[i].Udir[k].flag=0;
break;
}

//else printf("出错\n");
}
return;
}

void Read()
{
int l;
char file[10];
printf("请输入你想读的文件:");
scanf("%s",file);
for(l=0;l<5;l++)
if(!strcmp(AFD[l].opname,file)&&AFD[l].flag)
if(AFD[l].opfprotect[0])
{printf("the file has read.\n");
return;
}
else
{
printf("cannot read!\n");
return;
}
if(l>=5)
printf("文件尚未打开,请先打开文件\n");
return;
}


void Write() 
{
int l;
char file[10];
printf("请输入你想写的文件:");
scanf("%s",file);
for(l=0;l<5;l++)
if(!strcmp(AFD[l].opname,file)&&AFD[l].flag)
if(AFD[l].opfprotect[1])
{
printf("the file has written.\n");
return;
}
else
{
printf("cannot write!\n");
return;
}
if(l>=5)
printf("文件尚未打开,请先打开文件\n");
return;
}

void printUFD(int i)
{
int k;
printf("主文件目录:\n",UFD[i].uname);
printf("用户名\t文件名\t可读\t可写\t可执行\t文件长度\n");
for(k=0;k<10;k++)
{
if(UFD[i].Udir[k].flag)
cout<<UFD[i].uname<<'\t'<<UFD[i].Udir[k].fname<<'\t'<<UFD[i].Udir[k].fprotect[0]<<'\t'<<UFD[i].Udir[k].fprotect[1]<<'\t'<<UFD[i].Udir[k].fprotect[2]<<'\t'<<UFD[i].Udir[k].flength<<'\t'<<endl;
//printf("%s%t%t%d  %d  %d\t\t%dB\n",UFD[i].uname,UFD[i].Udir[k].fname,UFD[i].Udir[k].fprotect[0],UFD[i].Udir[k].fprotect[1],UFD[i].Udir[k].fprotect[2],UFD[i].Udir[k].flength);


}
}


void printAFD()
{
int l;
printf("运行文件目录:\n");
printf("文件名\t可读\t可写\t可执行\n");
for(l=0;l<5;l++)
{
if(AFD[l].flag)
//cout<<AFD[l].opname<<'\t'<<AFD[l].opfprotect[0]<<'\t'<<AFD[l].opfprotect[1]<<'\t'<<AFD[l].opfprotect[2]<<endl;
printf("%s\t%d\t%d\t%d\n",AFD[l].opname,AFD[l].opfprotect[0],AFD[l].opfprotect[1],AFD[l].opfprotect[2]);
}
}

void Close()
{
int l;
char file[10];
printf("请选择文件:");
scanf("%s",file);
for(l=0;l<5;l++)
{
if(!strcmp(AFD[l].opname,file)&&AFD[l].flag)
{
AFD[l].flag=0;
printf("the file has close\n");
return;
}
}
if(l>=5)
printf("文件打开失败!\n");
return;
}

void main()
{
    int i,n=0;
char m[10];
char login[10];
intFSystem();
printf("1.本系统模拟文件管理 2.系统已初始化10个用户,\n用户名分别是a~j,每个用户已分配5个文件\n");
printf("**本系统的命令包括如下:\n");
printf("**创建文件(create)\n");
//printf("**删除文件(delete)\n");
printf("**打开文件(open)\n");
printf("**关闭文件(close)\n");
printf("**读取文件(read)\n");
printf("**编写文件(write)\n");
printf("**显示文件目录(printufd)\n");
printf("**显示打开文件目录(dir)\n");
printf("**退出(exit)\n");

lgin:printf("请输入用户名(a~j):");
scanf("%s",login);
if(!strcmp(login,"exit"))
return;
for(i=0;i<10;i++)
{
if(!strcmp(UFD[i].uname,login))
break;
}
if(i>=10)
{
printf("该用户名不存在!");
goto lgin;
}
printUFD(i);
for(;n!=1;)
{
printf("请输入命令:");
scanf("%s",&m);
if(strcmp(m,"create")==0)
Create(i);
/*else if(strcmp(m,"delete")==0)
Delete(i);*/
else if(strcmp(m,"open")==0)
Open(i);
else if(strcmp(m,"close")==0)
Close();
else if(strcmp(m,"read")==0)
Read();
else if(strcmp(m,"write")==0)
Write();
else if(strcmp(m,"printufd")==0)
printUFD(i);
else if(strcmp(m,"dir")==0)
printAFD();
else if(strcmp(m,"exit")==0)
n=1;
else printf("出错\n");
}
printf("Saving....\n");
printUFD(i);
getch();
return;
}
[解决办法]
for(k=0;k<1;k++) 这里为什么是小于1 啊
[解决办法]
虽然你的提问水平和屎一样,而且代码排版闪瞎氪金狗眼,但看在你一下出100分的面子上,我还是帮你看了下代码


void Delete(int i)
{
char file[10];
int k;
printf("请输入你想删除的文件名:");
scanf("%d",file); //这里要改成scanf("%s",file); %d是整形不是字符串,暂时先找到这一处,还有问题再说
for(k=0;k<1;k++)
{
while(UFD[i].Udir[k].flag&&!strcmp(UFD[i].Udir[k].fname,file))
{
UFD[i].Udir[k].flag=0;
break;
}

//else printf("出错\n");
}
return;
}

[解决办法]

char file[10];
int k;
printf("请输入你想删除的文件名:");
scanf("%s",file); /// 字符串

//建议:如果的你flag是代表文件删除的标志位的话,建议不要,直接在Delete函数里
//直接做

[解决办法]
char file[260];
int k;
printf("请输入你想删除的文件名:");fflush(stdout);
fgets(file,260,stdin);
if ('\n'==file[strlen(file)-1]) file[strlen(file)-1]=0;

热点排行