为什么C语言我用fread读入数据会乱码,函数如下
voidMaterial_warehousing()//物资入库的函数{inti,l;FILE*fp;materialpur,temp;material*p=&pur;m...
void Material_warehousing()//物资入库的函数{ int i, l; FILE *fp; material pur, temp; material *p = &pur; material *p1; if ((fp = fopen("data", "ab+")) == NULL)//打开文件 { printf("打开该文件失败!即将关闭程序.\n"); Sleep(3333); exit(1); } fseek(fp, 0, 2); p1 = (material*)malloc(ftell(fp)); do { printf("请分别输入物资名称、物资购入价格(元)、 物资数量、 采购人:\n"); scanf("%s%lf%d%s", p->name, &p->price, &p->num, p->purchaser); printf("%s%f%d%s\n", p->name, p->price, p->num, p->purchaser); if (p->price < 0 || p->num <= 0) { printf("输入错误,请重新输入!\n"); } } while (p->price < 0 || p->num <= 0); if (ftell(fp) == 0)//若文件中不存在记录 { p->code = 1; if (fwrite(p, sizeof(material), 1, fp))//判断是否输出成功 { printf("输出成功!\n"); } else { printf("输出失败!\n"); } fclose(fp); } else//若文件中存在记录 { for (i = 0; i < ftell(fp) / sizeof(material); i++)//读取文件内容到程序中 { fread(p1 + i, sizeof(material), 1, fp); } fseek(fp, 0, 0); for (i = 0; i < ftell(fp) / sizeof(material); i++)//判断文件中是否存在相同名字的物品 { if (strcmp((p1 + i)->name, p->name) == 0) { break; } } fseek(fp, 0, 2); if (i < ftell(fp))//若存在相同名字的物品 { (p1 + i)->num = (p1 + i)->num + p->num; l = ftell(fp) / sizeof(material);//要输出的数据结构体的个数 fclose(fp); if ((fp = fopen("data", "wb")) == NULL)//重新创建文件 { printf("输出失败!即将关闭程序.\n"); Sleep(3333); exit(1); } for (i = 0; i < l; i++) { if (fwrite(p1, sizeof(material), 1, fp))//判断是否输出成功 { printf("输出成功!\n"); } else { printf("输出失败!\n"); } } } else//若不存在相同名字的物品 { fseek(fp, -76, 2); fread(&temp, sizeof(material), 1, fp);//读取最后一个数据的编号 p->code = temp.code + 1;//这次添加的数据的编号 fseek(fp, 0, 2); if (fwrite(p, sizeof(material), 1, fp))//判断是否输出成功 { printf("输出成功!00\n"); } else { printf("输出失败!\n"); } } } fclose(fp);}
展开
2个回答
展开全部
应该是超出数组长度的问题,现在也没有电脑不方便调试代码,你可以自己先检查一下,读取的内容放到了哪里,输出的时候输出的是什么
可以一步一步打印,如果有问题再继续问
可以一步一步打印,如果有问题再继续问
更多追问追答
追问
我去看了一下,还是看不出有什么问题。。第一次可以这么正常读出来第二次添加后就乱码了。 能不能帮我看一看
我是新手,也不是很懂
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询