c语言将结构体写入文件
答案:3 悬赏:50 手机版
解决时间 2021-04-04 14:47
- 提问者网友:放下
- 2021-04-03 15:00
c语言将结构体写入文件
最佳答案
- 五星知识达人网友:街头电车
- 2021-04-03 15:34
整个结构体写入
读出来时整个结构体读出
类型没什么关系 二进制读写还管你变量什么类型追问可以把具体的程序告诉我吗追答#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;i<2;i++,pp++)
{
scanf("%s%d%d%s",pp->name,&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;i<2;i++,qq++)
{
printf("%s\t%5d%7d %s\n",qq->name,qq->num,qq->age,qq->addr);
}
fclose(fp);
}追问这里结构体中不是只有int型和char型,
struct stu
{
char name[10];
int num;
int age;
char addr[15];
}boya[2],boyb[2],*pp,*qq;
如果是
struct stu
{
char name[10];
int age;
float height;
}
呢追答你脑子转不过弯儿啊?
我在第三行不是都说过了吗
结构体里的变量类型你随便改
我就给你举个例子
现在是把结构体里的数据整体写入
跟结构体里面的数据类型没关系的 你明白么?追问不好意思,我c语言不怎么懂,为了交作业,你看看我的程序,我不知道该怎么改追答贴上来追问补充里追答按最佳答案修改是不对的
按下面这样修改就对了 而且你绝对不知道为什么
知道里也没几个人知道是为什么 哈哈哈哈
#include
#include
#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];
float test =3.1415926; //就加了个这个
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 {
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);
}
}
大半夜的帮你弄出来了
明天再告诉你为什么追问真的可以耶!!为什么呢,一会给你追加10分追答一共才15分
我回答这个不是为了分
这个问题是 C语言中 float类型的 lazy load
嗯 google上的专家级回答
经常会导致莫名其妙的问题
读出来时整个结构体读出
类型没什么关系 二进制读写还管你变量什么类型追问可以把具体的程序告诉我吗追答#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;i<2;i++,pp++)
{
scanf("%s%d%d%s",pp->name,&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;i<2;i++,qq++)
{
printf("%s\t%5d%7d %s\n",qq->name,qq->num,qq->age,qq->addr);
}
fclose(fp);
}追问这里结构体中不是只有int型和char型,
struct stu
{
char name[10];
int num;
int age;
char addr[15];
}boya[2],boyb[2],*pp,*qq;
如果是
struct stu
{
char name[10];
int age;
float height;
}
呢追答你脑子转不过弯儿啊?
我在第三行不是都说过了吗
结构体里的变量类型你随便改
我就给你举个例子
现在是把结构体里的数据整体写入
跟结构体里面的数据类型没关系的 你明白么?追问不好意思,我c语言不怎么懂,为了交作业,你看看我的程序,我不知道该怎么改追答贴上来追问补充里追答按最佳答案修改是不对的
按下面这样修改就对了 而且你绝对不知道为什么
知道里也没几个人知道是为什么 哈哈哈哈
#include
#include
#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];
float test =3.1415926; //就加了个这个
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
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);
}
}
大半夜的帮你弄出来了
明天再告诉你为什么追问真的可以耶!!为什么呢,一会给你追加10分追答一共才15分
我回答这个不是为了分
这个问题是 C语言中 float类型的 lazy load
嗯 google上的专家级回答
经常会导致莫名其妙的问题
全部回答
- 1楼网友:迟山
- 2021-04-03 17:05
谁说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文件生成,打开可以看到保存到文件的部分内容。
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文件生成,打开可以看到保存到文件的部分内容。
- 2楼网友:末日狂欢
- 2021-04-03 16:01
谁说fwrite只能写入整形的
fwrite((void*)&variable, 1, sizeof(float), fp);
写结构体入文件时要格外注意对齐格式,最好可以单元素写,单元素读。整个结构体写入的话,如果读出程序对齐格式与写入程序不同,那读出来的数据一定是错的。
fwrite((void*)&variable, 1, sizeof(float), fp);
写结构体入文件时要格外注意对齐格式,最好可以单元素写,单元素读。整个结构体写入的话,如果读出程序对齐格式与写入程序不同,那读出来的数据一定是错的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯