c语言将结构体写入文件

c语言将结构体写入文件,用二进制方法打开文件,用fwrite写文件,但是fwrite只能写入整形的,如果我想将结构体写入文件,但是结构体中包含float型变量,我该怎么做... c语言将结构体写入文件,用二进制方法打开文件,用fwrite写文件,但是fwrite只能写入整形的,如果我想将结构体写入文件,但是结构体中包含float型变量,我该怎么做
#include<stdio.h>
#include<process.h>
#define SIZE 100
typedef struct market_st
{
char name[10];
int number;
float price;
char discount[10];
}M_LIST ;
void acceptdata(M_LIST m_list[]);
int main()
{
FILE *fp;
M_LIST m_list[SIZE];
if((fp=fopen("d:\\market.dat","wb"))==NULL)
{
printf("\ncannot open file\n");
exit(0);
}
acceptdata(m_list);
if(fwrite(m_list,sizeof(M_LIST),SIZE,fp)!=SIZE)
printf("file write error\n");
fclose(fp);
return 0;
}
void acceptdata(M_LIST m_list[])
{
int i;
for(i=0;i<SIZE;i++)
{
printf("请输入商品名称:");
scanf("%s",&m_list[i].name);
printf("请输入商品编号:");
scanf("%d",&m_list[i].number);
printf("请输入商品价格:");
scanf("%f",&m_list[i].price);
printf("请输入商品折扣情况:");
scanf("%s",&m_list[i].discount);
}
}
运行不出来,这应该怎么改呢
展开
 我来答
xxpxxxxp
2012-09-11 · TA获得超过836个赞
知道小有建树答主
回答量:277
采纳率:0%
帮助的人:382万
展开全部
谁说fwrite只能写入整形的
fwrite((void*)&variable, 1, sizeof(float), fp);
写结构体入文件时要格外注意对齐格式,最好可以单元素写,单元素读。整个结构体写入的话,如果读出程序对齐格式与写入程序不同,那读出来的数据一定是错的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沧海雄风2009
推荐于2017-12-15 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8525
采纳率:79%
帮助的人:2899万
展开全部
整个结构体写入

读出来时整个结构体读出

类型没什么关系 二进制读写还管你变量什么类型
更多追问追答
追问
可以把具体的程序告诉我吗
追答
#include

struct stu
{
char name[10];
int num;
int age;
char addr[15];
}boya[2],boyb[2],*pp,*qq;

void main()
{
FILE *fp;
char ch;
int i;
pp=boya;
qq=boyb;
if((fp=fopen("d:\\stu_list","wb+"))==NULL)
{
printf("Cannot open file strike any key exit!");
}
printf("\ninput data\n");
for(i=0;iname,&pp->num,&pp->age,pp->addr);
}
pp=boya;
fwrite(pp,sizeof(struct stu),2,fp);
//将文件指针重新指向一个流的开头
rewind(fp);
fread(qq,sizeof(struct stu),2,fp);
printf("\n\nname\tnumber age addr\n");
for(i=0;iname,qq->num,qq->age,qq->addr);
}
fclose(fp);

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
byzxybd
2012-09-11 · TA获得超过455个赞
知道小有建树答主
回答量:731
采纳率:100%
帮助的人:428万
展开全部
谁说fwrite只能写整形的。

struct A
{
float ax;
char bx[5];
int cx;
}

A a;
fwrite(&a, sizeof(a), 1, fp);
整体写入,
也可以分开写,fwrite(&a.ax, sizeof(float), 1, fp);
...
自己想怎么写,就怎么写。
追问
不好意思,我c语言不怎么懂,为了交作业,你看看我的程序,我不知道该怎么改
追答
程序没问题,我把SIZE修改为1后运行,一切正常,并在d:\market.dat文件生成,打开可以看到保存到文件的部分内容。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式