有一段代码老是出现无限循环,帮忙看一下

eks_222 eks_222 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
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;
}
...全文

相关推荐

评论 16
收藏 已收藏
分享
返回顶部
eks_222
C++ 语言 65,214 成员 250,514 内容