chandelmo 2022-03-10 21:10 采纳率: 100%
浏览 33
已结题

c语言问题,实验二个人资金账户管理之删除功能为什么是死循环啊我的代码


  //删除一个记录
void Deletelog(FILE *cfptr)
{ 
FILE *fp1;
 struct LogData log[1000],*plog=log;/*假定文件不超过 1000 记录*/
 long logcount,logid,i,index=-1; 
 printf("Input LogID:"); 
 scanf("%ld",&logid);/*输入要删除的记录 ID*/ 
/*查找帐户号是否存在,若存在则更新*/ 
 logcount=getLogcount(cfptr);/*获取记录数*/ 
 rewind(cfptr); 
 fread(plog,size,logcount,cfptr); 
 for(i=0;i<logcount;i++)
 { 
 if(logid==log[i].logid) /*已经找到*/ 
 {/*显示当前记录*/
 printf("logid logdate lognote charge balance\n");
 /*输出当前记录*/ 
 printf("%6ld %-11s %-15s %10.2lf %10.2lf\n", 
log[i].logid,log[i].logdate,log[i].lognote,log[i].charge,log[i].balance);
 index=i;
 getch();
 break; 
 } 
 } 
rewind(cfptr); 
 
 for(i=index;i<=logcount-1;i++)
{
 log[i].logid=i+1;
 strcpy(log[i].logdate,log[i+1].logdate); 
 strcpy(log[i].lognote,log[i+1].lognote); 
 log[i].charge=log[i+1].charge;
 log[i].balance=log[i-1].balance+log[i].charge;
}
printf("logid logdatelognote charge balance\n");
 for(i=0;i<logcount-1;i++)
{
/*输出当前记录*/ 
 printf("%6ld %-11s %-15s %10.2lf %10.2lf\n", 
log[i].logid,log[i].logdate,log[i].lognote,log[i].charge,log[i].balance);
}
 getch();
 fp1=fopen("cashbox.dat", "wb+");
 
 fwrite(plog,size,logcount-1,fp1);/*写回去更新*/
 
 fclose(fp1);
 printf("Press any key to continue...");
 getch();

}

int main(void){
FILE *fp;int choice;
if((fp=fopen("cashbox.dat","ab+"))==NULL){
printf("can not open file cashbox.dat!\n");
exit(0);
}
size=sizeof(struct LogData);
choice=inputchoice();
while(choice!=0){
switch(choice){
case 1:
fp=fopen("cashbox.dat","ab+");
AddNewLog(fp);break;
case 2:
fp=fopen("cashbox.dat","ab+");
ListAllLog(fp);break;
case 3:
fp=fopen("cashbox.dat","ab+");
QueryLastLog(fp);break;
case 4:
fp=fopen("cashbox.dat","ab+");
Updatelog(fp);break;
case 5:
fp=fopen("cashbox.dat","ab+");
Deletelog(fp);break;
default:
printf("Input Error!");break;
}
}
if(fclose(fp)){
printf("Can not close the file\n");
exit(0);
}

}

img


  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-03-10 21:40
    关注

    首while(choice!=0){这个循环条件有问题啊,你的选项是1到5,肯定不是0啊,不就死循环了么。在这个while循环中,没有break跳出循环,也没有修改choice值的地方。循环中的break只是跳出switch而已
    你可以在while(choice !=0)的循环结束处增加choice=inputchoice();让用户再次选择所做的操作就可以了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月18日
  • 已采纳回答 3月10日
  • 创建了问题 3月10日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度