
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]);
}
} 展开
#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]);
}
} 展开
展开全部
没有看到你写入文件的信息,你读取的是二进制的文件,读写字符串用这种方式是有很大的缺陷的,会出现乱码,读取出来的东西很难调试,我也碰到过很多问题,用sizeof()读取的那个空间,有些部分就是乱码,那乱码部分就是我们没有写入的部分却被读取出来了。建议你向文件读写信息用fprintf和fscanf这两个函数,他们写入文件的信息是没有乱码的!
追问
我写入的是结构体数据 一个个太麻烦
如果那么输入 程序会很长的
展开全部
一、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);
改成:
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);
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询