void omit(void) //删除商品信息
{
struct goods stock;
FILE *fp,*fp1;
char ch[20];
char f;
int flag=0;
do
{
fp=fopen("库存记录.dat","rb+");
fp=fopen("临时记录.dat","wb+");
flag=0;
if(fp==NULL)
{
printf("\t 不能打开文件! \n");
getchar();
exit(1);
}
printf("请输入你需要删除的商品名称:\n");
scanf("%s",ch);
while(!feof(fp))
{
if(fread(&stock,sizeof(stock),1,fp))
{
if(strcmp(ch,stock.name )==0)
{
printf("删除成功!\n");
flag=1;
}
else
{
fwrite(&stock,sizeof(stock),1,fp1);
}
}
}
fclose(fp);
fclose(fp1);
if(flag==0)
printf("没有找到该商品信息!\n");
//remove("库存记录.dat");
//rename("临时记录.dat","库存记录.dat");
printf("还需要删除其他商品吗?(y/n):\n");
f=getchar();
getchar();
}
while(f=='y'||f=='n');
printf("按任意键返回菜单");
getchar();
system("CLS");
menu();
}
为什么这个删除商品信息的函数,当库存中没有此商品时不能显示出无此商品的信息也不能返回菜单?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 技术专家团-小桥流水 2021-12-13 23:37关注
(1)
scanf("%s",&ch);改成 scanf("%s",ch);
ch本身就是数组的首地址,不需要在加&。
(2)你的printf("没有找到该商品信息!\n");这个打印,每读一次文件,如果不满足条件就输出一次,这是不对的吧,应该是所有数据都读完以后,所有记录都不符合if条件再输出没找到
(3)你的fp1这个文件没有打开啊,fwrite的时候怎么能写成功呢?
(4)fp是用来读取文件的,打开的时候不应该是wb+,应该是rb+
代码修改如下:
void omit(void) //删除商品信息 { struct goods sst; FILE *fp,*fp1; char ch[20]; char f; int flag = 0; //新增1 int cnt = 1; do { fp=fopen("库存记录.dat","rb+"); //修改1: fp是读文件,用rb+ fp1 = fopen("临时记录.dat","wb+"); //修改2, flag = 0; //新增2:重置标记 if(fp==NULL) { printf("\t 不能打开文件! \n"); getchar(); exit(1); } printf("请输入你需要删除的商品名称:\n"); scanf("%s",ch); //修改3 去掉& while(!feof(fp)) { if(fread(&sst,sizeof(sst),1,fp)) { printf("%d : %s\n",cnt,sst.name); //在这里显示一下读取的数据是否正确 cnt++; if(strcmp(ch,sst.name )==0) { printf("删除成功!\n"); flag = 1; //新增3:找到要删除的产品 } else { fwrite(&sst,sizeof(sst),1,fp1); //printf("没有找到该商品信息!\n"); //修改4 } } } fclose(fp); fclose(fp1); //新增4 if(flag==0) printf("没有找到该商品信息!\n"); remove("库存记录.dat"); rename("临时记录.dat","库存记录.dat"); printf("还需要删除其他商品吗?(y/n):\n"); f=getchar(); getchar(); } while(f=='y'||f=='n'); printf("按任意键返回菜单"); getchar(); system("CLS"); menu(); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥100 Jenkins自动化部署—悬赏100元
- ¥15 关于#python#的问题:求帮写python代码
- ¥20 MATLAB画图图形出现上下震荡的线条
- ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
- ¥15 perl MISA分析p3_in脚本出错
- ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
- ¥15 ubuntu虚拟机打包apk错误
- ¥199 rust编程架构设计的方案 有偿
- ¥15 回答4f系统的像差计算
- ¥15 java如何提取出pdf里的文字?