64,654
社区成员
发帖
与我相关
我的任务
分享
void Delete(fstream f)
{
int choice8; //用于询问是否要继续删除文件
do
{
AnsSys question;
int k=1; //显示问题的序号
int choice7;
f.seekp(0,ios::beg);
long posEnd=f.tellp();
f.seekp(0,ios::beg);
do //把问题显示出来,方便用户选择要删除哪一个问题
{
f.read((char*)(&question),sizeof(AnsSys));
cout<<k++<<"."<<question.Ques<<endl;
}while(f.tellp()!=posEnd);
AnsSys *temp=new AnsSys[k] ; //建立一个数组,用于从磁盘文件中导出所有的问题
f.seekp(0,ios::beg);
int i=0;
do
{
f.read((char*)(&question),sizeof(AnsSys));
temp[i]=question; //从磁盘文件中导出所有问题
i++;
}while(f.tellp()!=posEnd);
cout<<"请输入您所要删除的问题的序号"<<endl;
while(cin>>choice7) //接收并判断所要删除的问题序号
{
if(choice7<k||choice7>0)
break;
else
cout<<"输入错误,请重新输入"<<endl;
}
for(int j=choice7-1;j<k-1;j++) //后一个问题覆盖前一个,也就是删除
{
temp[j]=temp[j+1];
}
FILE *fp=fopen("d:\\hello.bat","w"); //关闭在重新打开,清空文件中保存的数据
fclose(fp);
f.seekp(0,ios::beg);
int l=0;
do //把覆盖好的数组写入文件
{
f.write((char *)(&temp[l]),sizeof(AnsSys));
l++;
}while(l!=k-2);
cout<<"删除完毕,按y选择继续删除,按任意健退出"<<endl;
cin>>choice8;
}while(choice8!='y'||choice8!='Y');
return;
}
int l=0;
do //把覆盖好的数组写入文件
{
f.write((char *)(&temp[l]),sizeof(AnsSys));
l++;
}while(l!=k-2);
如果这个时候,k<3,就陷入死循环了
int k=1;
do //把问题显示出来,方便用户选择要删除哪一个问题
{
f.read((char*)(&question),sizeof(AnsSys));
cout<<k++<<"."<<question.Ques<<endl;
}while(f.tellp()!=posEnd);
这句执行完了,k是>=2的;
int l=0;
do //把覆盖好的数组写入文件
{
f.write((char *)(&temp[l]),sizeof(AnsSys));
l++;
}while(l!=k-2);
如果这个时候,k<=3,就陷入死循环了
AnsSys question;
int k=1; //显示问题的序号
int choice7;
f.seekp(0,ios::beg);
long posEnd=f.tellp();
f.seekp(0,ios::beg);
AnsSys question;
int k=1; //显示问题的序号
int choice7;
f.seekp(0,ios::end);//改了这里
long posEnd=f.tellp();
f.seekp(0,ios::beg);
void Delete(fstream f)
{
int choice8; //用于询问是否要继续删除文件
do
{
AnsSys question;
int k=1; //显示问题的序号
int choice7;
f.seekp(0,ios::end);
long posEnd=f.tellp();
f.seekp(0,ios::beg);
do //把问题显示出来,方便用户选择要删除哪一个问题
{
f.read((char*)(&question),sizeof(AnsSys));
cout<<k++<<"."<<question.Ques<<endl;
cout<<"a"<<endl;
}while(f.tellp()!=posEnd);
AnsSys *temp=new AnsSys[k] ; //建立一个数组,用于从磁盘文件中导出所有的问题
f.seekp(0,ios::beg);
int i=0;
do
{
f.read((char*)(&question),sizeof(AnsSys));
temp[i]=question; //从磁盘文件中导出所有问题
i++;
}while(f.tellp()!=posEnd);
cout<<"请输入您所要删除的问题的序号"<<endl;
while(cin>>choice7) //接收并判断所要删除的问题序号
{
if(choice7<k||choice7>0)
break;
else
cout<<"输入错误,请重新输入"<<endl;
}
for(int j=choice7-1;j<k-1;j++) //后一个问题覆盖前一个,也就是删除
{
temp[j]=temp[j+1];
}
FILE *fp=fopen("d:\\hello.bat","w"); //关闭在重新打开,清空文件中保存的数据
fclose(fp);
f.seekp(0,ios::beg);
int l=0;
do //把覆盖好的数组写入文件
{
f.write((char *)(&temp[l]),sizeof(AnsSys));
l++;
}while(l!=k-2);
cout<<"删除完毕,按y选择继续删除,按任意健退出"<<endl;
cin>>choice8;
}while(choice8!='y'&&choice8!='Y');
return;
}
do //把问题显示出来,方便用户选择要删除哪一个问题
{
f.read((char*)(&question),sizeof(AnsSys));
cout<<k++<<"."<<question.Ques<<endl;
}while(f.tellp()!=posEnd);
......
char choice8;
......
cout<<"删除完毕,按y选择继续删除,按任意健退出"<<endl;
cin>>choice8;
}while(choice8=='y'||choice8=='Y');
return;
}