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);
}
}
运行不出来,这应该怎么改呢 展开
#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);
}
}
运行不出来,这应该怎么改呢 展开
展开全部
谁说fwrite只能写入整形的
fwrite((void*)&variable, 1, sizeof(float), fp);
写结构体入文件时要格外注意对齐格式,最好可以单元素写,单元素读。整个结构体写入的话,如果读出程序对齐格式与写入程序不同,那读出来的数据一定是错的。
fwrite((void*)&variable, 1, sizeof(float), fp);
写结构体入文件时要格外注意对齐格式,最好可以单元素写,单元素读。整个结构体写入的话,如果读出程序对齐格式与写入程序不同,那读出来的数据一定是错的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
整个结构体写入
读出来时整个结构体读出
类型没什么关系 二进制读写还管你变量什么类型
读出来时整个结构体读出
类型没什么关系 二进制读写还管你变量什么类型
更多追问追答
追问
可以把具体的程序告诉我吗
追答
#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);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
谁说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);
...
自己想怎么写,就怎么写。
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文件生成,打开可以看到保存到文件的部分内容。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询