C语言 下面那里错了 为什么不能从文件读信息

#include<stdio.h>#include<stdlib.h>#defineMAX50typedefstructequipmentInfo{charequipCo... #include<stdio.h>
#include<stdlib.h>
#define MAX 50
typedef struct equipmentInfo
{ char equipCode[10]; //设备编号
char equipType[20]; //设备总类
char equipName[20]; //设备名称
float equipPrice; //设备价格
char buyDate[20]; //设备购入日期
int scrap; //是否报废,0 表示没有报废,1 表示报废
char scrapDate[20]; //报废日期
}EquInfo;
EquInfo head[MAX];
EquInfo b[1],c[MAX];
maopao_1()
{
int i=0,n,m,k;
FILE *fp;
EquInfo temp;
if((fp=fopen("file2.txt","r+"))==NULL)
return;
while(!(feof(fp)))
{
fread(&c[i],sizeof(EquInfo),1,fp);
i++;
}
for(n=0;n<i-1;n++)
{
k=n;
for(m=n+1;m<i;m++)
if(strcmp(c[k],c[m])>0)
k=m;
if(k!=n)
{temp=c[n];c[n]=c[k];c[k]=temp;}
}
for(n=0;n<i;n++)
{
printf("设备总类%s",c[n].equipType[20]);
printf("设备编号%s",c[n].equipCode[10]);
printf("设备名称%s",c[n].equipName[20]);
printf("设备价格%f",c[n].equipPrice);
printf("设备购入日期%s",c[n].buyDate[20]);
printf("设备是否报废%d",c[n].scrap);
printf("设备报废日期%s",c[n].scrapDate[20]);
}
}
展开
 我来答
scc172fly
2011-10-26 · TA获得超过193个赞
知道小有建树答主
回答量:259
采纳率:0%
帮助的人:113万
展开全部
没有看到你写入文件的信息,你读取的是二进制的文件,读写字符串用这种方式是有很大的缺陷的,会出现乱码,读取出来的东西很难调试,我也碰到过很多问题,用sizeof()读取的那个空间,有些部分就是乱码,那乱码部分就是我们没有写入的部分却被读取出来了。建议你向文件读写信息用fprintf和fscanf这两个函数,他们写入文件的信息是没有乱码的!
追问
我写入的是结构体数据  一个个太麻烦
如果那么输入 程序会很长的
kaixingui2012
推荐于2016-11-08 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6876万
展开全部
一、fread(&c[i],sizeof(EquInfo),1,fp);
改成:
if ( fread(&c[i],sizeof(EquInfo),1,fp) != 1 ) break ; //读到文件尾时有可能返回一个0

二、你对字符串(字符数组)引用理解有错误!equipType[x]表示引用第x+1个元素!
printf("设备总类%s",c[n].equipType);
printf("设备编号%s",c[n].equipCode);
printf("设备名称%s",c[n].equipName);
printf("设备价格%f",c[n].equipPrice);
printf("设备购入日期%s",c[n].buyDate);
printf("设备是否报废%d",c[n].scrap);
printf("设备报废日期%s",c[n].scrapDate);
三、还有,在退出函数前,或文件操作完毕后,记得:
fclose(fp);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式